【发布时间】:2021-01-10 00:22:55
【问题描述】:
我的 python 程序正在与一个设备对话,每次它收到一个对 push/ack 的 ack 时,都会将对话延迟一整秒。对话有数百条消息,甚至数千条消息,所以我自然想要解决这个问题。
有没有办法打开与我的设备的连接,保持打开状态以发送给它,但不确认我通过 socket.recv() 收到的消息?
import socket
s = socket.socket()
s.bind(('', xxxxx))
s.connect(('x.x.x.x', xxxxx))
while True:
try:
msg = input()
if 'exit' in msg:
data = b'I am done now, bye'
s.send(data)
data = s.recv(2048)
print('recieved final message: ' + str(data))
break
msg = msg.encode()
s.send(msg)
print('sent message: ' + str(msg))
data = s.recv(2048)
print('received message: ' + str(data))
print()
data = ''
except Exception as e:
print(e)
s.close()
【问题讨论】:
-
如果另一端没有发送 >= 2048 字节,那么您依赖于套接字超时,这会使一切变得相当缓慢。使用
socket.getdefaulttimeout()查找您的(特定于实现的)套接字默认超时 - 也许是一秒?您可以缩短它,这很可能会加快速度。建议您阅读并理解标题“使用套接字”下方的描述docs.python.org/3/howto/sockets.html -
能不能不修设备?
-
@barny 我认为 s.recv(2048) 至少接收 1 到最多 2048 个字节并立即返回,除非没有可用的字节?
-
@barny 默认情况下,它会一直等待?
标签: python sockets tcp recv ack