Java 使用ZeroMQ 2.2 进行通信编程
需要用到网络通信时,ZeroMQ( 简称ZMQ )比较方便,他提供了许多对服务端和客户端之间的通信方式:REP/REQ、PULL/PUSH( 应用这两个就能实现比较简单的数据查询与发送功能 ), 具体有方式在ZMQ的jar包的ZMQ.class 中可以看到,都是通过定义为int常量,如下:
1 public static final int PUB = 1; 2 public static final int SUB = 2; 3 4 public static final int REQ = 3; 5 public static final int REP = 4; 6 7 public static final int DEALER = 5; 8 9 public static final int XREQ = 5; 10 public static final int XREP = 6; 11 12 public static final int ROUTER = 6; 13 14 15 public static final int PULL = 7; 16 public static final int PUSH = 8; 17 18 public static final int XPUB = 9; 19 public static final int XSUB = 10; 20 21 public static final int STREAMER = 1; 22 public static final int FORWARDER = 2; 23 24 public static final int QUEUE = 3; 25 26 public static final int UPSTREAM = 7; 27 public static final int DOWNSTREAM = 8;
下面就以REQ/REP为例进行简单的说明。
REQ( Request ) 和REP( Response )进行编程时,首先需要建立一个REP,并开始接受请求,在收到请求之后需要对请求进行处理,处理完返回处理结果即可,代码如下:
1 public static void main(String[] argv) { 2 ZMQ.Context context = ZMQ.context(1); 3 ZMQ.Socket socket = context.socket(ZMQ.REP); 4 String url = "tcp://*:9999"; 5 try { 6 socket.bind(url); 7 } catch (ZMQException e) { 8 throw e; 9 } 10 boolean wait = true; 11 while (wait) { 12 byte[] request; 13 try { 14 request = socket.recv(0); 15 16 17 /* TODO process request 18 * ..... 19 */ 20 socket.send("OK".getBytes(), 1); 21 22 } catch (ZMQException e) { 23 throw e; 24 } 25 } // while(wait) 26 }
客户端在通过REQ进行编程时,需要把请求通过byte类型( 需要与服务端接收请求的类型一至,一般用byte,官网上的示例代码是这样的,而且一般都以\0 表示结束 )发送过去,之后等待响应。代码如下:
1 public static void main(String[] args) { 2 ZMQ.Context context = ZMQ.context(1); 3 ZMQ.Socket socket = context.socket(ZMQ.REQ); 4 5 System.out.println("Connecting to hello world server..."); 6 socket.connect("tcp://localhost:9999"); 7 8 String requestString = "Hello" + " "; 9 byte[] request = requestString.getBytes(); 10 socket.send(request, 0); 11 12 byte[] reply = socket.recv(0); 13 System.out.println("Received reply [" + new String(reply) + "]"); 14 }
注:官方给的示例代码中在send和recv方法中传int类型值的时候都是用0, 在ZMQ类中有一个变量public static final int PAIR = 0, 可能就是这个变量吧,说明在通信过程中是要相互匹配的( 如REQ和REP要一起工作, 个人猜想 ),否则在工作过程中是会抛异常的。
官方在git上的代码位置为: https://github.com/imatix/zguide2
转载于:https://www.cnblogs.com/sigh-differ/archive/2012/11/12/zmq-first-blood.html
Java 使用ZeroMQ 2.2 进行通信编程相关推荐
- java面试题44关于 Socket 通信编程,以下描述正确的是:( )
java面试题44关于 Socket 通信编程,以下描述正确的是:( ) A 客户端通过new ServerSocket()创建TCP连接对象 B 客户端通过TCP连接对象调用accept()方法创建 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- 2018-2019-2 20175227张雪莹《Java程序设计》实验五 《网络编程与安全》
2018-2019-2 20175227张雪莹<Java程序设计> 实验五 <网络编程与安全> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:20 ...
- Java实现简易聊天室以及Scoket编程入门
介绍了Scoekt的概念,并且提供了基于TCP和UDP协议的Java Socket API编写的简单通信程序,比如简易的聊天室. 此前我们简单的学了各种协议,我们知道大部分的应用层协议,比如HTTP. ...
- VC串口通信编程-2
VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...
- ZeroMq实现跨线程通信
ZeroMq实现跨线程通信 之前在技术崇拜的技术经理指导下阅读了ZeroMq的基础代码,现在就将阅读的心得与成果记录一下,并重新模仿实现了一下经理的异步队列. 1.对外接口 //主要接口(1)void ...
- 浅谈通信编程(二)--如何分离通信物理接口和应用程序
如何分离通信物理接口和应用程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- C#中串口通信编程 收藏
C#中串口通信编程 收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports.这个新的框架不但可以访问计算机上的 ...
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
最新文章
- java B2B2C Springcloud多租户电子商城系统-消息驱动的微服务(消费分区)
- 一加6升级android p,一加6手机升级安卓P攻略 教你怎么更新安卓P Beta版
- Spring Security3源码分析-UsernamePasswordAuthenticationFilter分析
- Ubuntu如何搭建Django与Flup和Nginx环境?
- VirtualBox Ubuntu个人配置
- jenkins 部署问题
- 电脑显示没有被指定在上运行_可以桌面显示的便条便签怎么弄?有没有电脑桌面上的便条贴...
- 怎么向字体库中添加字体
- photoshop高光,暗,中间调选区获取
- pytorch官网不支持cuda10.2
- VMware Workstation 15 Player 社区版安装教程
- 分享 :CSS常见面试题
- LLVM 与 Clang 介绍
- python输入日期选择日期_python输入日期输出星座?
- 【SeMask】Semantically Masked Transformers for Semantic Segmentation
- vue 大屏数字上下滚动
- 考研英语二阅读理解态度题解题技巧
- 高等数学在计算机的应用论文,高等数学论文-计算机软件和应用.doc
- 微型计算机周明德课后答案,微机原理(周明德)课后题答案..doc
- SYDTEK系列芯片低速PWM的三个模式和用法