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

一. 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). 服务端在收到消息之前,会一直阻塞,等待客户端连上来。

zmq java 消息阻塞_ZMQ的三种消息模式_第1张图片

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

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

你可能感兴趣的:(zmq,java,消息阻塞)