`

ZeroMQ-J

 
阅读更多
ZeroMQ是一个网络通信框架.
相关帮助文档地址: http://zguide.zeromq.org/page:all#Handling-Multiple-Sockets

通信模式示意:Request/Response

ON SERVER

server端的代码:

package test;

import org.zeromq.ZMQ;

public class Response {
	public static void main (String[] args) {

		ZMQ.Context context = ZMQ.context(1);  //创建用于一个I/O线程的context
		
		ZMQ.Socket socket = context.socket(ZMQ.REP);  //创建一个response类型的socket,服务端接受Request.
		socket.bind ("tcp://*:5555");    //端口绑定
		int i = 0;
		int number = 0;
		while (!Thread.currentThread().isInterrupted()) {
			i++;
			if (i == 10000) {
				i = 0;
				System.out.println(++number);
			}
			byte[] request = socket.recv();  //获取request数据
			//System.out.println("receive : " + new String(request));
			String response = "world";
			socket.send(response.getBytes());  //向request端发送数据  ,必须要要request端返回数据,没有返回就又recv,将会出错,这里可以理解为强制要求走完整个request/response流程
		}
		socket.close();  //关闭socket
		context.term();  //关闭当前的上下文
       
    }
}





客户端


package test;

import org.zeromq.ZMQ;

public class Request {
	public static void main(String args[]) {
		for (int j = 0;  j < 5; j++) {
			new Thread(new Runnable(){

				public void run() {
					// TODO Auto-generated method stub
					ZMQ.Context context = ZMQ.context(1);  //创建一个I/O线程的上下文
					ZMQ.Socket socket = context.socket(ZMQ.REQ);   //客户端,用于向response端发送数据
					
					socket.connect("tcp://127.0.0.1:5555");   //与response端建立连接
					long now = System.currentTimeMillis();
					for (int i = 0; i < 100000; i++) {
						String request = "hello";
						socket.send(request.getBytes());   //向reponse端发送数据
						byte[] response = socket.recv();   //接收response发送回来的数据  正在request/response模型中,send之后必须要recv之后才能继续send,这可能是为了保证整个request/response的流程走完
					//	System.out.println("receive : " + new String(response));
					}
					long after = System.currentTimeMillis();
					
					System.out.println((after - now) / 1000);
				}
				
			}).start();;
		}
		
	}
}





创建了包含一个线程的context,然后创建了一个REQ,也就是request类型的socket,然后与5555端口建立连接,然后就进入了循环,不断的向服务端发送数据,然后接收数据。。。

Maven 相关依赖配置
 
<dependency>
  		<groupId>org.zeromq</groupId>
  		<artifactId>jeromq</artifactId>
  		<version>0.3.1</version>
	</dependency>
  • 大小: 8.6 KB
分享到:
评论

相关推荐

    zmq-script-wrapper:ZeroMQ循环脚本包装器-将简单脚本转换为服务

    ZeroMQ循环脚本包装器(zmq-script-wrapper) 该项目旨在使一个简单的Shell脚本的同时副本能够一次连续运行,从而消除了加载脚本及其各种组件的开销。 需求的示例场景: 假设您有一个包含一些命令参数的shell脚本...

    nflog-zmq-pcap-pipe:收集 nflog 并将其通过网络 (0mq) 传输到 pcap 流文件以进行实时(或接近)分析的工具

    一组脚本,允许使用 netfilter NFLOG 模块选择性转储数据包,并通过 zeromq 通道将这些数据包发送到远程主机(在那里生成 pcap 流)以进行分析。 用例是通过一些预过滤(使用 iptables,因为它通常比 BPF 或用户...

    SaltStack详细.doc

    - 解压并编译安装:`tar xvf Python-2.7.8.tgz` → `cd Python-2.7.8` → `./configure --prefix=/usr/local` → `make -j $(nproc)` → `make install` - 将Python头文件复制到标准目录:`cd /usr/local/include/...

    cross-lingual-embedding:ACL-18纸的代码

    StatNLP语义解析器版本0.3-n ACL-18论文的代码:学习用于语义分析的跨语言分布式逻辑表示形式。 本文从使用不同语言注释的数据..../autogen.sh && ./configure && make -j 4 make check && sudo make install && sudo

    textnet-release:TextNet:用于文本匹配的深度神经网络框架

    ./bin/textnet [model_file]特征构造模型: 资料格式: 依存关系mshadow:jsoncpp: ZeroMQ: d3:[用于将来的功能]版本v1.0相关项目cxxnet: Caffe: 致谢以下人员为TextNet项目的开发做出了贡献: 梁P 中国科学院...

    rabbitmq教程

    目前市场上较为流行的消息队列框架包括RabbitMQ、ActiveMQ、ZeroMQ、Kafka以及阿里巴巴开源的RocketMQ等。本教程将重点介绍RabbitMQ及其使用方法。 #### RabbitMQ简介 RabbitMQ是一个开源的消息代理软件,基于...

    nanomsg-1.2.1.tar.gz

    nanomsg是一个开源的、跨平台的库,由著名软件开发者Daniel J. Bernstein创建,旨在提供简单、安全、可扩展的消息传递机制。它的设计灵感来源于早期的ZeroMQ,但目标是提供更简洁的API和更好的性能。在1.2.1版本中,...

    ZMQ.jl:Julia到ZMQ的界面

    6. **集成与生态系统**:ZMQ.jl可能与其他Julia库如Distributed(用于Julia内置的分布式计算)或JLD2(用于数据序列化和持久化)等协同工作,形成更强大的解决方案。 总的来说,ZMQ.jl是Julia生态系统中的一部分,...

    The new CERN Controls Middleware

    本文将详细介绍CERN控制系统的最新中间件设计资料,这些资料来源于2012年J. Phys.: Conf. Ser. ***的论文。 CERN控制中间件(CMW)项目是在十多年前启动的,其主要目标是统一用于操作CERN加速器复合体的中间件解决...

    CM_RL_Driver:RL驱动程序的CM项目

    CM_RL_Driver 学士学位论文“在汽车制造商中作为赛车手的软演员至上”的回购此回购包含一个用于CM和论文的项目文件夹。 运行这个项目 根据《程序员指南》,需要使用src文件夹中的make命令来编译...chart * .vg.j

    hierarchical-programming-language-mapping:[ICSE'18]通过代码的分布式矢量表示分层学习跨语言映射

    DATA / DATA_RAW.tar.gz:包含以下开源项目的原始数据:antlr,cordova,datastax,factual,fpml,log4j,lucene,spring,uap,zeromq DATA / TRAINING_SENTENCES:包含C#和Java之间对齐语句的已处理数据,它将...

    srpc依赖环境.rar(文章中有免费的哈)

    3. **网络库**:RPC通信需要网络支持,srpc可能依赖于特定的网络库,比如gRPC使用的protobuf或ZeroMQ等消息传递库。 4. **序列化/反序列化库**:数据在RPC调用中传输,通常需要序列化为二进制或文本格式,如JSON、...

    Spark Streaming解析

    Spark Streaming 支持多种数据源,包括但不限于 Kafka、Flume、Twitter 和 ZeroMQ 等。数据处理完成后,结果可以保存到 HDFS、数据库或其他外部系统中。此外,Spark Streaming 还能够与 Spark 的其他组件(如 MLlib ...

    TypeScript类型定义DefinitelyTyped.zip

    DefinitelyTyped 包含大量的高质量的 TypeScript 类型定义。 包括: Ace Cloud9 Editor (by Diullei Gomes) AmCharts (by Covobonomo) AngularJS (by Diego Vilar) (wiki... ZeroClipboard (by Eric J. Smith)

    s4需要的包,已经测试过,很全

    5. **监控和日志库**:例如Log4j或Metrics库,用于系统的监控和调试。 6. **开发工具和测试框架**:如JUnit,用于编写和运行测试用例,确保S4应用的正确性。 7. **特定领域的组件**:如Yahoo可能添加的特定算法...

    基于Linux开发的QQ聊天室

    6. **消息队列**:为了处理消息的异步处理,可能会使用消息队列技术,如RabbitMQ或ZeroMQ,来保证消息的有序性和可靠性。 7. **文件操作API**:聊天室中的文件操作功能需要调用Linux的文件系统接口,如open、read、...

Global site tag (gtag.js) - Google Analytics