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
分享到:
相关推荐
ZeroMQ循环脚本包装器(zmq-script-wrapper) 该项目旨在使一个简单的Shell脚本的同时副本能够一次连续运行,从而消除了加载脚本及其各种组件的开销。 需求的示例场景: 假设您有一个包含一些命令参数的shell脚本...
一组脚本,允许使用 netfilter NFLOG 模块选择性转储数据包,并通过 zeromq 通道将这些数据包发送到远程主机(在那里生成 pcap 流)以进行分析。 用例是通过一些预过滤(使用 iptables,因为它通常比 BPF 或用户...
- 解压并编译安装:`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/...
StatNLP语义解析器版本0.3-n ACL-18论文的代码:学习用于语义分析的跨语言分布式逻辑表示形式。 本文从使用不同语言注释的数据..../autogen.sh && ./configure && make -j 4 make check && sudo make install && sudo
./bin/textnet [model_file]特征构造模型: 资料格式: 依存关系mshadow:jsoncpp: ZeroMQ: d3:[用于将来的功能]版本v1.0相关项目cxxnet: Caffe: 致谢以下人员为TextNet项目的开发做出了贡献: 梁P 中国科学院...
目前市场上较为流行的消息队列框架包括RabbitMQ、ActiveMQ、ZeroMQ、Kafka以及阿里巴巴开源的RocketMQ等。本教程将重点介绍RabbitMQ及其使用方法。 #### RabbitMQ简介 RabbitMQ是一个开源的消息代理软件,基于...
nanomsg是一个开源的、跨平台的库,由著名软件开发者Daniel J. Bernstein创建,旨在提供简单、安全、可扩展的消息传递机制。它的设计灵感来源于早期的ZeroMQ,但目标是提供更简洁的API和更好的性能。在1.2.1版本中,...
6. **集成与生态系统**:ZMQ.jl可能与其他Julia库如Distributed(用于Julia内置的分布式计算)或JLD2(用于数据序列化和持久化)等协同工作,形成更强大的解决方案。 总的来说,ZMQ.jl是Julia生态系统中的一部分,...
本文将详细介绍CERN控制系统的最新中间件设计资料,这些资料来源于2012年J. Phys.: Conf. Ser. ***的论文。 CERN控制中间件(CMW)项目是在十多年前启动的,其主要目标是统一用于操作CERN加速器复合体的中间件解决...
CM_RL_Driver 学士学位论文“在汽车制造商中作为赛车手的软演员至上”的回购此回购包含一个用于CM和论文的项目文件夹。 运行这个项目 根据《程序员指南》,需要使用src文件夹中的make命令来编译...chart * .vg.j
DATA / DATA_RAW.tar.gz:包含以下开源项目的原始数据:antlr,cordova,datastax,factual,fpml,log4j,lucene,spring,uap,zeromq DATA / TRAINING_SENTENCES:包含C#和Java之间对齐语句的已处理数据,它将...
3. **网络库**:RPC通信需要网络支持,srpc可能依赖于特定的网络库,比如gRPC使用的protobuf或ZeroMQ等消息传递库。 4. **序列化/反序列化库**:数据在RPC调用中传输,通常需要序列化为二进制或文本格式,如JSON、...
Spark Streaming 支持多种数据源,包括但不限于 Kafka、Flume、Twitter 和 ZeroMQ 等。数据处理完成后,结果可以保存到 HDFS、数据库或其他外部系统中。此外,Spark Streaming 还能够与 Spark 的其他组件(如 MLlib ...
DefinitelyTyped 包含大量的高质量的 TypeScript 类型定义。 包括: Ace Cloud9 Editor (by Diullei Gomes) AmCharts (by Covobonomo) AngularJS (by Diego Vilar) (wiki... ZeroClipboard (by Eric J. Smith)
5. **监控和日志库**:例如Log4j或Metrics库,用于系统的监控和调试。 6. **开发工具和测试框架**:如JUnit,用于编写和运行测试用例,确保S4应用的正确性。 7. **特定领域的组件**:如Yahoo可能添加的特定算法...
6. **消息队列**:为了处理消息的异步处理,可能会使用消息队列技术,如RabbitMQ或ZeroMQ,来保证消息的有序性和可靠性。 7. **文件操作API**:聊天室中的文件操作功能需要调用Linux的文件系统接口,如open、read、...