【发布时间】:2012-02-07 05:22:26
【问题描述】:
一旦我运行 .py 使用套接字 sendto() 发送 10000 UDP(长度为:110),服务器快速接收大约 400 条消息,后来变得非常慢,每个消息超过 10 秒。
如果我再次运行 .py 会很奇怪,很快又收到了 400 条消息。
对于这种情况,是否存在缓冲区限制或 UDP 问题?
是的,我明白了! UDP 不确定目的地,在 300 条消息后继续阻塞。所以我必须添加 time.sleep(0.2) 才能使其工作。现在我正在尝试多个服务器进程的时间间隔。
【问题讨论】:
-
如果您在一个紧密的循环中发送消息,那么是的,这可能是一个缓冲问题。也可能是防火墙降低了速率,因为在短时间内连续发送 10000 个数据包通常是病毒或 DDOS 特洛伊木马或类似的迹象。
-
我还没有答案,但我观察到了类似的问题。深入研究让我发现,对于我们在 while 循环中调用的 Python 中的每个 sendto(),它每次都会进行一次路由查找(strace 显示正在创建一个 netlink 套接字并在其上调用了 recvmsg)。这整个过程减慢了一切。这似乎只发生在 IPV6 而不是 IPV4。当我发现更多时,我会更新。 C 程序不会遇到这样的问题。