【问题标题】:Which ZMQ pattern should I use for this scenario? [closed]在这种情况下我应该使用哪种 ZMQ 模式? [关闭]
【发布时间】:2020-08-01 16:46:54
【问题描述】:

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

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

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

任何建议将不胜感激!

【问题讨论】:

    标签: multithreading zeromq pyzmq


    【解决方案1】:

    如果不了解所有细节很难回答,但这里有一些提示可能会让你朝着正确的方向前进。

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

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

    • 用于从中间件到客户端的更新的 Push-Pull 连接。
    • 用于从客户端响应到中间件的 Push-Pull 连接。

    【讨论】:

    • 您好,很抱歉回复晚了。在阅读了一段时间的 ZMQ 指南后,我发现使用 ROUTER 模式和 ZMQ 轮询器解决了我的问题。非常感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多