有什么方法可以使用套接字相对快速地在UDP上发送大量数据(大约10,000字节)?

时间:2018-06-19 18:12:18

标签: python sockets

是否可以相对快速地发送大量数据(大约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)

我反复向服务器发送消息。

1 个答案:

答案 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秒。