如果我收到UDP数据的速度比我的程序可以处理的速度快,那么我的失败点是什么?

问题描述 投票:0回答:1

我有简单的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. 如果我有更高速率的UDP数据~3k-4k UDP /秒,我会用完RAM吗?磁盘空间? ETH?我将数据压缩到端点时会丢失UDP吗?
  2. 我该如何解决这些问题?获得更多内存,磁盘,eth?任何指针都会有所帮助。
python python-2.7 sockets udp
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.