将pub/sub与zeromq中的req/rep结合使用

Moc*_*ace 12 zeromq

客户如何使用zeromq订阅和收听回复?也就是说,在客户端,我想运行一个只接收消息并有选择地发送请求的循环,而在服务器端我想发布大部分时间,但有时也会收到请求.看起来我必须有两个不同的插座 - 每个插槽用于一种通信模式.是否有可能避免这种情况,并在服务器端从zeromq回调线程上的套接字接收"请求通知",同时将消息推送到我自己的线程中的套接字?

bjl*_*aub 15

我对ZeroMQ非常陌生,所以我不确定你想要的是否是最佳实践.但是,使用多个套接字的解决方案非常简单zmq_poll.

基本的想法是同时拥有客户端和服务器:

  • 打开pub/sub的套接字
  • 为req/rep打开一个套接字
  • 多路复用zmq_poll在无限循环中使用循环在两个套接字之间发送和接收
  • 在循环中处理req/rep和pub/sub事件

使用zmq_poll这种方式与多个插座是好的,因为它避免了完全线程.0MQ指南在这里有一个很好的例子.请注意,在该示例中,它们使用-1in 的超时zmq_poll,这导致它阻塞,直到在任何多路复用套接字上发生至少一个事件,但是如果您的循环需要执行,则使用x毫秒的超时或者某些事情是很常见的其他一些工作也是如此.