如果我收到UDP数据的速度比我的程序可以处理的速度快,那么我的失败点是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我收到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[:]
我的问题是
- 如果我有更高速率的UDP数据~3k-4k UDP /秒,我会用完RAM吗?磁盘空间? ETH?我将数据压缩到端点时会丢失UDP吗?
- 我该如何解决这些问题?获得更多内存,磁盘,eth?任何指针都会有所帮助。
答案
由于一次只能在内存中保存最多500个数据包,因此不会耗尽RAM。光盘空间完全无关紧要。如果您的应用程序处理的数据比数据包到达的速度慢,则操作系统将缓冲它们。但是,在某些时候缓冲区已满并且数据包将被丢弃。您可以配置缓冲区大小,但如果它们以比处理它们更高的速率连续到达,那将无济于事。不丢失UDP数据包的唯一方法是使您的应用程序足够快。
以上是关于如果我收到UDP数据的速度比我的程序可以处理的速度快,那么我的失败点是什么?的主要内容,如果未能解决你的问题,请参考以下文章