我是ZMQ和多线程设计的新手,所以我希望对我的方案的设计模式有所了解:
我有一个充当中间件的服务器,它将以固定的速率从数据库接收外部数据,然后将数据转发到其连接的客户端。服务器将进行一些过滤,以便每个客户端仅接收部分数据;有时,客户端还会在收到数据后发送回响应,服务器需要处理并将响应存储到数据库中。
由于每秒可能有数百个客户端连接到服务器,所以我正在考虑将Router-Dealer模式用于服务器-客户端部分;对于服务器数据库部分,可能使用一个工作线程来接收外部数据,并通过“ inproc”协议将其转发给服务器内部的其他工作者是一个好主意?
任何建议将不胜感激!
代替使用线程,可以考虑使用zmq_poll()
使用多路复用。我猜这是PyZMQ中的zmq.Poller
。这通常比线程容易得多。如果中间件不必为每个消息做很多工作,这是一个不错的选择。您也可以将两种方法结合起来:一组有限的线程,其中每个线程使用多路复用处理多个连接。
Router-Dealer是一个不错的选择。您还可以考虑在客户端和服务器之间使用多个套接字连接,例如: