擅长:python、mysql、java
<p>请记住,在并发环境中,不能保证独立进程的执行顺序。即使您正在立即响应<code>server.py</code>中的消息,在您调用<code>socket.recv</code>之前,响应可能无法到达接收套接字。{3当你的客户端需要回拨你的消息时,你需要回你的服务器,然后通过网络返回你的消息。通过网络发送消息的时间会很长,您将在<code>socket.send</code>之后立即调用<code>socket.recv</code>。在</p>
<p>因此,实际上,当您调用<code>message = socket.recv(flags=zmq.NOBLOCK)</code>时,客户机<code>socket</code>还没有从服务器接收到{<cd8>},而且由于您使用的是<code>NOBLOCK</code>,因此会抛出一个错误,因为<code>socket</code>上没有收到任何消息。在</p>
<p><code>NOBLOCK</code>在这种情况下可能不合适。您可以通过在<code>send</code>和<code>recv</code>之间添加一个<code>sleep</code>调用来证明等待服务器响应的时间延迟确实是问题所在,但对于客户端代码来说,这不是一个好的解决方案。在</p>
<p>如果要在等待一定时间后退出,则应使用<code>socket.poll</code>。<a href="https://pyzmq.readthedocs.io/en/latest/api/zmq.html#zmq.Socket.poll" rel="nofollow noreferrer">https://pyzmq.readthedocs.io/en/latest/api/zmq.html#zmq.Socket.poll</a></p>