在这种情况下,我应该使用哪种ZMQ模式?

时间:2020-05-24 13:17:30

标签: multithreading zeromq pyzmq

我是ZMQ和多线程设计的新手,所以我希望对我的方案的设计模式有所了解:

我有一个充当中间件的服务器,它将以固定的速率从数据库接收外部数据,然后将数据转发到其连接的客户端。服务器将做一些过滤,以便每个客户端将只接收一部分数据。有时,客户端还会在收到数据后发送回响应,服务器需要处理并将响应存储到数据库中。

由于每秒可能有数百个客户端连接到服务器,因此我正在考虑将Router-Dealer模式用于服务器-客户端部分;对于服务器数据库部分,可能最好使用一个工作线程来接收外部数据,然后通过“ inproc”协议将其转发给服务器内部的其他工作者?

任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

不知道所有详细信息很难回答,但是这里有一些指示可能会帮助您朝正确的方向前进。

您可以考虑使用zmq_poll()来使用多路复用,而不是使用线程。我猜这是PyZMQ中的zmq.Poller。设置通常比线程简单得多。如果中间件不必为每个消息做很多工作,这是一个不错的选择。您还可以将两种方法结合使用:一组有限的线程,其中每个线程使用多路复用处理多个连接。

如果流量不是严格的请求-响应,

Router-Dealer是一个不错的选择。您还可以考虑在客户端和服务器之间使用多个套接字连接,例如:

  • 一个推挽式连接,用于从中间件到客户端的更新。
  • 推拉连接,用于从客户端到中间件的响应。