gpt4 book ai didi

python - Python 中的 ZMQ : New socket object for each incoming connection

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:05 24 4
gpt4 key购买 nike

ZMQ 中的套接字只需绑定(bind)到一个接口(interface),然后就能够立即接收消息,如下所示:

socket.bind("tcp://*:5555")
message = socket.recv()

由于多个连接可以同时向该套接字发送数据,如何区分不同的发送者?

另一方面,对于常规套接字,首先接受传入连接,这会生成一个新套接字,如下所示:

serversocket.bind((socket.gethostname(), 5555))
serversocket.listen()
(clientsocket, address) = serversocket.accept()

在这里,可以轻松区分不同的发送者,因为每个发送者都是通过不同的套接字接收的。

从 ZMQ 方便的基于消息和队列缓冲的通信中受益的最佳方式是什么,但仍然在收到请求时立即创建任意数量的可区分的一对一连接?

最佳答案

如何区分不同的客户端取决于您用作“服务器”的套接字类型,下面的解释也有望回答第二个问题。

REQ - 将回复发送请求的客户端,REQ 套接字上的 recv 调用后面必须跟有 send 因此,在处理完第一个请求之前,您无法处理下一个请求。但是,来自不同客户端的多个请求将排队。

ROUTER - 将在您recv 的消息上附加一个帧,其中包含发送者的客户端 ID。发送消息时,第一帧将被删除并用于识别要回复的已连接客户端。您应该存储直到并包括空分隔符帧的所有帧,并在发送回复时将它们添加到您的回复消息中。与REQ不同的是,在再次调用recv之前不需要发送任何消息。如果未指定,客户端 ID 将由 ZeroMQ 生成,但如果您想要“持久性”,您可以通过带有 zmq.IDENTITY 标志的 setsockopt 设置 id。

关于python - Python 中的 ZMQ : New socket object for each incoming connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com