我在 python 中使用 REQ/REP 类型的套接字进行 ZMQ 通信。有多个客户端尝试连接到一台服务器。已在客户端脚本中添加超时以防止无限期等待。
问题是,当服务器没有运行,并且客户端尝试建立连接时,它的消息被添加到队列缓冲区中,理想情况下此时甚至不应该存在。当脚本开始运行并且新客户端连接时,服务器首先接收前一个客户端的数据。这不应该发生。
当服务器启动时,它假定客户端已连接到它,因为它之前曾尝试连接,并且无法干净地退出(因为服务器已关闭)。
在下面的代码中,当客户端第一次尝试时,它得到ERR 03: Server down哪个是正确的,然后是Error disconnecting. 当服务器启动时,我得到ERR 02: Server Busy第一个连接的客户端。这不应该发生。客户端应该能够与服务器无缝连接,因为它已经启动并正在运行。
服务器代码:
import zmq
def server_fn():
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://192.168.1.14:5555")
one=1
while one == 1:
message = socket.recv()
#start process if valid new connection
if message == 'hello':
socket.send(message) #ACK
#keep session alive until application ends it.
while one == 1:
message = socket.recv()
print("Received request: ", message)
#exit connection
if message == 'bye': …Run Code Online (Sandbox Code Playgroud)