zmq java 消息阻塞_ZMQ的三种消息模式

ZMQ提供了一种N:M的通信模式,简化了网络编程,支持多种通信协议,具备消息队列、自动重连、阻塞控制等功能。文章介绍了ZMQ的三种消息模式:请求-应答模式,发布-订阅模式和推送-拉取(分布式处理)模式,并给出了Python实现示例。请求-应答模式下,客户端和服务器可以灵活启动,消息发送与接收遵循特定顺序。发布-订阅模式中,消息单向流动,发布者与订阅者之间不直接交互。推送-拉取模式适合分布式处理,任务发布器、工作者和结果接收器通过ZMQ进行高效协同。
摘要由CSDN通过智能技术生成

一. ZMQ是什么?

普通的socket是端对端(1:1)的关系,ZMQ是N:M的关系,socket的连接需要显式地建立连接,销毁连接,选择协议(TCP/UDP)和

错误处理,ZQM屏蔽了这些细节,像是一个封装了的socket库,让网络编程变得更简单。ZMQ不关用于主机与主机之间的socket通信,

还可以是线程和进程之间的通信。

ZMQ提供的套接字可以在多种协议中传输消息,线程间,进程间,TCP等。可以使用套接字创建多种消息模式,如‘请求-应答模式’,‘发布-订阅模式’,‘分布式模式’等。

二. ZMQ特点

1. 组件来去自如,ZQM会负责自动重连,服务端和客户端可以随意的退出网络。tcp的话,必须现有服务端启动,在启动客户端,否则会报错。

2. ZMQ会在必要的情况下将消息放入队列中保存,一旦建立了连接就开始发送。

3. ZMQ有阈值机制,当队列满的时候,可以自动阻塞发送者,或者丢弃部分消息。

4. ZMQ可以使用不同的通信协议进行连接,TCP,进程间,线程间。

5. ZMQ提供了多种模式进行消息路由。如请求-应答模式,发布-订阅模式等,这些模式可以用来搭建网络拓扑结构。

6. ZMQ会在后台线程异步的处理I/O操作,他使用一种不会死锁的数据结构来存储消息。

三. ZMQ的三种消息模式

1. Reuqest-Reply(请求-应答模式)

(1). 使用Request-Reply模式,需要遵循一定的规律。

(2).客户端必要先发送消息,在接收消息;服务端必须先进行接收客户端发送过来的消息,在发送应答给客户端,如此循环

(3). 服务端和客户端谁先启动,效果都是一样的。

(4). 服务端在收到消息之前,会一直阻塞,等待客户端连上来。

7b9b2556deba15834fd50bc3d25968d6.png

创建一个客户端和服务端,客户端发送消息给服务端,服务端返回消息给客户端,客户端和服务器谁先启动都可以

client.py

import zmq

context=zmq.Context()

socket=context.socket(zmq.REQ)

socket.connect("tcp://localhost:5555")

#客户端必须要先发送消息,然后在接收消息if __name__ == '__main__':

print('zmq client start....')for i in range(1, 10):

socket.send_string("hello")

message=socket.recv()

print('received reply message:{}'.format(message))

server.py

import zmq

import time

context=zmq.Con

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值