【问题标题】:Should I use the OS socket buffer as a message queue?我应该使用 OS 套接字缓冲区作为消息队列吗?
【发布时间】:2014-09-26 13:26:45
【问题描述】:

这个问题涉及从几十个 UDP 套接字读取和处理大量数据的 Java 应用程序的设计,但我认为它与其他语言和环境有关。

我见过像上面描述的网络应用程序有专门的线程,用于尽快从套接字缓冲区读取数据,在应用程序内部重新排队,然后在单独的线程中处理它。

在处理线程准备好接收下一条数据之前,将数据留在套接字缓冲区中是否有任何问题?快速读取数据并在应用程序内部重新排队有什么好处吗?

如果处理逻辑不够快,缓冲区将被填满。但是,如果处理逻辑太慢而无法处理入站数据,那么数据在哪里排队似乎并不重要。如果入站数据突然激增,套接字缓冲区应该足够大以处理它。

【问题讨论】:

    标签: java networking nio


    【解决方案1】:

    网络堆栈中接收到的 UDP 数据包的缓冲区大小是有限的。如果缓冲区已满,将会丢失一些数据包。

    如果处理 UDP 数据包的软件知道,它可能需要一些时间才能处理数据包,那么尽快读取数据包是有意义的,释放网络堆栈缓冲区,而不是实现自己的缓冲区或数据包的队列,它们可以在其中缓存,直到处理资源实际可用。

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      相关资源
      最近更新 更多