ZMQ通信模式:REQ-REP模式

2017-12-07  本文已影响155人  EVANMORE

一对一的场景

REQ-REP模式是阻塞式的,也就是说必须要client先发送一条消息给server,然后server才可以返回一个response给client。任何顺序上的错误都会导致报错。


服务端代码

zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REP);
socket.bind ("tcp://*:5555");
socket.recv (&message);
zmq::message_t reply (5);
socket.send (reply);

客户端代码

zmq::context_t context (1
zmq::socket_t socket (context, ZMQ_REQ);

socket.connect ("tcp://localhost:5555");
zmq::message_t request (5);
socket.send (request);
zmq::message_t reply;
socket.recv (&reply);

之前演示的是一对一的通信场景,但是实际通信场景下,可能会有多个服务端或多个客户端的场景。

多个客户端对多个服务端

如下图演示的是一个一对多的例子,

在实际的应用场景中,这个系统维护起来显然不容易。
所以这个时候就引入了brocker

Broker

引入broker后,之前的问题解决了,当增加server端时,不需要修改所有的client端,只需要更新一下broker就好了。

这里引入了两种新的socket类型,DEALER和ROUTER。

Open topics

  1. 消息的帧格式是怎样的?有空帧么?
上一篇 下一篇

猜你喜欢

热点阅读