python socket在windows下不可靠

问题描述

我正在从事一个跨平台项目,该项目每 0.133 秒收听一次来自第三方应用的消息。

在 Linux 上,它工作正常,但在 Windows 上,在收到 1000 条消息后,我的套接字开始返回 b'',我必须重新连接到服务器才能再次接收消息,但到了重新连接了一些消息已被丢弃,这对我的项目来说是不可接受的。

你遇到过这种行为吗? 有没有办法检查可能是什么问题? 这里的大问题是“断开连接”(甚至不确定它是断开连接)是无声地发生的,我没有进一步调查该问题的信息。

我试过了:

  • 调整套接options 但没有成功
  • 通过重用旧套接字重新连接(sock.connect() 但它引发了已连接的异常)
  • socket 内部缓冲区应该没问题;处理一条消息需要 0.05 秒,消息每 0.133 秒到达一次

本质上,代码遵循以下结构。

import socket
from struct import unpack

sock = socket.socket(socket.AF_INET,socket.soCK_STREAM)
sock.setblocking(True)
sock.connect((host,port))

while True:
    readable,_,error = select.select([sock],[],[sock],0.250)
    
    for read in readable:
        # After a few 1000 messages this always returns b''
        # creating a new socket enable us to receive messages again
        # but a few messages were dropped in the meantime
        msg_size = read.recv(4)

        msg_len = int(unpack("@I",msg_size)[0])

        msg = read.recv(msg_len)
        assert len(msg) == msg_len

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)