哪种ZeroMQ模式最适合用于异步套接字对?

3
我可以帮您进行翻译。以下是需要翻译的内容:

我有一台服务器(在亚马逊上运行),以及一个连接到该服务器的单个客户端。建立连接后,客户端和服务器之间会独占地进行通信并发送消息。

例如:

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

客户端可能会失去连接,过一段时间后重新连接并恢复消息发送。另外,消息的顺序有什么影响?#2可能会在#1之前到达吗?
2个回答

2
为了补充现有答案(因为它有一条得到赞同的评论要求详细说明),一个解决方案可能是在每个节点上设置两个套接字。以下是一个示例,其中我们使用input发送消息,同时在后台线程上监听响应:

server.py

Original Answer翻译成"最初的回答"
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)

1
在这种情况下,推/拉是最好的选择。它将允许异步消息传递,但如果端点暂时掉线,它将存储消息。
对于排序,ZeroMQ是FIFO队列的抽象,并建立在TCP之上。这将确保所有消息按接收顺序传递给应用程序。

4
推拉不是单向的吗?我要怎样发送反方向的消息呢? - nickponline

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接