是否可以相对快速地发送大量数据(大约10,000字节)?我目前正在使用socket.recvfrom,接收每条消息大约需要一分钟。 编辑:这是我恢复消息的方式,sock是UDP套接字,并且max_buffer从1024开始
while True:
try:
data, addr = sock.recvfrom(max_buffer) # buffer
print(data)
break
except OSError:
max_buffer *= 2
data = json.loads(data)
我不会粘贴获取消息的代码,因为它很长,但是它是一个json字典,总共约占10000个字节。这是我发送的方式:
sock.sendto(json.dumps(data).encode(), address)
我反复向服务器发送消息。
答案 0 :(得分:1)
有什么方法可以相对快速地发送大量数据(大约10,000字节)?
是的,请使用socket.sendto()
。这是一个示例客户端:
import socket
import datetime
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = bytes(i%256 for i in range(10000))
print(datetime.datetime.now())
s.sendto(data, ('localhost', 5000))
print(datetime.datetime.now())
请注意,它将创建一个10,000字节的bytes
对象,并在一次调用中将其传递给s.sendto()
。
使用此服务器:
import socket
import datetime
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('localhost', 5000))
data, addr = s.recvfrom(100*1024)
print(datetime.datetime.now())
我从客户那里得到了这个结果:
2018-06-19 13:36:13.443418
2018-06-19 13:36:13.443636
我从服务器获得了以下结果:
2018-06-19 13:36:13.443666
因此,到sendto()
调用大约需要2/10000秒,而数据到达之后不到1/10000秒。