【问题标题】:Which ZeroMQ pattern is best of an asynchronous pair of sockets?哪个 ZeroMQ 模式是最好的异步套接字对?
【发布时间】:2019-04-20 01:03:02
【问题描述】:

我有一个服务器(在亚马逊上运行)和一个连接到它的客户端。建立连接后,客户端和服务器以独占方式相互通信并发送消息。

例如

1. Client -> Server
2. Client -> Server
3. Client <- Server
4. Client -> Server
5. Client <- Server
6. Client <- Server

客户端可能会失去连接并在一段时间后重新连接并恢复消息发送。还有消息顺序的含义是什么? #2 会在 #1 之前到达吗?

【问题讨论】:

    标签: zeromq pyzmq


    【解决方案1】:

    要为现有答案添加一些内容(因为它有一个要求详细说明的赞成评论),一种解决方案可能是在每个节点上设置两个套接字。下面是一个示例,我们使用input 发送消息,同时监听后台线程的响应:

    server.py

    import zmq
    import threading
    
    context = zmq.Context()
    send_socket = context.socket(zmq.PUSH)
    send_socket.bind('tcp://*:5556')
    
    def print_incoming_messages():
        recv_socket = context.socket(zmq.PULL)
        recv_socket.bind('tcp://*:5557')
        while True:
            msg = recv_socket.recv_string()
            print(f'Message from client: {msg}')
    
    # Print incoming messages in background
    recv_thread = threading.Thread(target=print_incoming_messages)
    recv_thread.start()
    
    while True:
        msg = input('Message to send: ')
        send_socket.send_string(msg)
    

    client.py

    import zmq
    import threading
    
    context = zmq.Context()
    send_socket = context.socket(zmq.PUSH)
    send_socket.connect('tcp://127.0.0.1:5557')
    
    def print_incoming_messages():
        recv_socket = context.socket(zmq.PULL)
        recv_socket.connect('tcp://127.0.0.1:5556')
        while True:
            msg = recv_socket.recv_string()
            print(f'Message from server: {msg}')
    
    recv_thread = threading.Thread(target=print_incoming_messages)
    recv_thread.start()
    
    while True:
        msg = input('Message to send: ')
        send_socket.send_string(msg)
    

    【讨论】:

      【解决方案2】:

      在这种情况下推/拉是最好的。它将允许异步消息传递,但会在端点丢失一段时间后存储消息。

      对于排序,ZeroMQ 是 FIFO 队列的抽象,并基于 TCP 构建。这将确保所有消息都按照接收顺序传递给应用程序。

      【讨论】:

      • 推拉不是定向的吗?我如何以另一种方式发送消息?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      相关资源
      最近更新 更多