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