zeromq 模式,用于多客户端从一台服务器推送套接字拉接收

Posted

技术标签:

【中文标题】zeromq 模式,用于多客户端从一台服务器推送套接字拉接收【英文标题】:zeromq pattern for multi client pull receive from one server pushing socket 【发布时间】:2016-01-10 18:51:16 【问题描述】:

我想对标记为 1...n 的多个客户端使用 zeromq,以便在服务器推送包含一个字段作为客户端 ID 的消息时从同一个套接字接收接收。服务端推送标签为 1 的消息时,只有客户端 1 接收到。

一种方法是为客户端生成相同数量的服务器套接字进行一一连接,我认为这可能有更好的解决方案。非常感谢。

【问题讨论】:

【参考方案1】:

使用“发布/订阅”模式并设置用于过滤消息的套接字选项。

SUB 端代码:

context = zmq.Context()
socket = context.socket(zmq.SUB);
socket.connect ("tcp://localhost:%s" % port)
topicfilter = "10001"
socket.setsockopt(zmq.SUBSCRIBE, topicfilter)
string = socket.recv()

PUB 端代码:

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:%s" % port)
topic = 10001
messagedata = random.randrange(1,215) - 80
socket.send("%d %d" % (topic, messagedata))

示例和模式描述here

更新

你可以使用的另一种模式Router-Req。 共同理念:

pythonhere的示例

【讨论】:

pub/sub 模式可能会丢失不适合此处的消息。有没有基于推/拉的模式? @ZFY,可以试试路由器/经销商模式

以上是关于zeromq 模式,用于多客户端从一台服务器推送套接字拉接收的主要内容,如果未能解决你的问题,请参考以下文章

PUSH/PULL 模式中丢失的消息(Ratchet + PHP + ZeroMQ 推送集成)

ZeroMQ - 为一台服务器模拟多个客户端的标准套接字

如何将推送通知从一台 iPhone 设备发送到另一台设备? [关闭]

zeromq:如何防止无限等待?

ZeroMQ/ZMQ 推/拉模式的用处

我可以从一台客户端计算机模拟大量的http负载