【问题标题】:ZeroMQ How can server mantain connections with all clients?ZeroMQ 服务器如何与所有客户端保持连接?
【发布时间】:2012-11-04 19:45:58
【问题描述】:

我有以下任务:

客户端通过 1 个端口(例如 8080)连接到服务器。服务器应该记住它们,并在完成计算后将结果发送给客户端。在该服务器一次又一次地获得一些结果之后将其发送给所有客户端。以此类推。

服务器如何保持与所有客户端的连接?

【问题讨论】:

    标签: c++ multithreading zeromq


    【解决方案1】:

    您真的需要维护来自客户端的所有连接吗?我认为,“发布/订阅”消息传递模型将满足所描述的条件。服务器应该“发布”结果,客户端应该“订阅”这个更新。您可以在 zguide 代码示例中找到此类“服务器”的最简单示例:wuserver.cpp

    【讨论】:

    • 我考虑过 PUP\SUB 模式,但我的服务器和客户端可以位于不同的网络\NAT 后面。我认为最强大的解决方案是连接应该由客户端发起。
    • 我没有看到不同网络等的问题,使用 pub/sub 您只需在连接到套接字时设置特殊的连接类型。所以从“稳健”的角度来看没有变化。
    • 您能否提供有关“特殊连接类型”的更多信息?我想我必须在所有有客户端的网络之间获得 PUB\SUB 代理。
    【解决方案2】:

    我发现一些代码使用 PUB\SUB 模型并在此处使用 NAT http://grokbase.com/t/zeromq/zeromq-dev/112q9934vg/nat-firewall-pub-sub-traversal:

    连接而不是绑定的发布者:

    import zmq
    ctxt = zmq.Context()
    pub = ctxt.socket(zmq.PUB)
    pub.connect("tcp://127.0.0.1:2000")
    while 1:
    pub.send(os.urandom(5))
    

    绑定而不是连接的订阅者:

    import zmq
    ctxt = zmq.Context()
    sub = ctxt.socket(zmq.SUB)
    sub.bind("tcp://127.0.0.1:2000")
    while 1:
    sub.rcv()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多