我应该将OS套接字缓冲区用作消息队列吗?

时间:2014-09-26 13:26:45

标签: java networking nio

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

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

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

如果处理逻辑不够快,缓冲区将填满。但是如果处理逻辑太慢而无法处理入站数据,那么数据排队的位置似乎并不重要。如果入站数据突然出现峰值,则套接字缓冲区应足够大以便处理它。

1 个答案:

答案 0 :(得分:2)

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

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