哪种 ZeroMQ 模式是异步套接字对中最好的



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

例如

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

客户端可能会失去连接,并在一段时间后重新连接并恢复消息发送。另外,消息顺序的含义是什么?#2 可以在 #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)
在这种情况下

,推/拉是最好的。它将允许异步消息传递,但如果端点离开一段时间,它将存储消息。

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

最新更新