【问题标题】:UDP sendto() became very low, pythonUDP sendto() 变得非常低,python
【发布时间】: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 程序不会遇到这样的问题。

标签: python udp sendto


【解决方案1】:

可能只是其他东西正在使用您的网卡同时发送,并且系统一次只能从您的应用程序发送400ish,然后其他东西需要使用NIC。这听起来更像是网络使用的问题,而不是 UDP 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2015-07-27
    • 2017-05-05
    相关资源
    最近更新 更多