如果我接收 UDP 数据的速度快于程序处理速度,我的故障点是什么?



我有一个简单的python脚本从UDP套接字接收数据,将500个UDP数据(每个~4 KB(组合在一起,并将该数据发布到Curl端点。在大约 100 UDP/秒的小尺度下,我的程序可以工作。

import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
mylist = []
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(4096) 
mylist.add(data)
if len(mylist) == 500:
# change mylist to json logic
curl XPOST 'Endpoint' --mylist 'application/json' # Basically Curl Xpost the data to endpoint.
del mylist[:]

我的问题是

  1. 如果我有更高的速率 ~ 3k-4k UDP/秒的 UDP 数据,我的 RAM 会用完吗?磁盘空间?乙醚?将数据卷曲到端点时是否会丢失 UDP?
  2. 如何解决这些问题?获得更多内存、磁盘、以太坊?任何指针都会有所帮助。

您不会耗尽 RAM,因为您一次最多只能在内存中保存 500 个数据包。磁盘空间完全无关紧要。如果应用程序处理数据的速度比到达的数据包慢,则操作系统将缓冲它们。但是,在某些时候缓冲区已满,数据包将被丢弃。您可以配置缓冲区大小,但如果它们以高于您处理它们的速率持续到达,这将无济于事。不丢失 UDP 数据包的唯一方法是使您的应用程序足够快。

最新更新