首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种ZeroMQ模式是异步套接字对中最好的?

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

Stack Overflow用户
提问于 2014-02-22 06:14:50
回答 2查看 2.6K关注 0票数 3

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

例如:

代码语言:javascript
复制
1. Client -> Server
2. Client -> Server
3. Client <- Server
4. Client -> Server
5. Client <- Server
6. Client <- Server

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

EN

回答 2

Stack Overflow用户

发布于 2019-04-19 23:23:14

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

server.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-02-23 18:36:28

在这种情况下,Push/pull是最好的。它将允许异步消息传递,但如果端点中断一段时间,它将存储消息。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21946289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档