2014-09-26 21 views
1

这个问题涉及的Java应用程序的设计,从几十UDP套接字读取和处理大量的数据,但我认为这是有关其他语言和环境。像上面所描述的我应该使用操作系统套接字缓冲区作为消息队列吗?

我看到网络应用已经用于读数据关闭套接字缓冲尽快,它重新入在应用程序内,然后在一个单独的线程处理它的专用螺纹(或多个)。

这有什么错留在套接字缓冲区中的数据,直到你的处理线程已准备好接收下一个数据的?在应用程序内部快速读取数据并重新进行数据读取是否有优势?

如果处理逻辑不够快,缓冲区将填满。但是,如果处理逻辑对于处理入站数据来说太慢,那么数据排队的位置似乎并不重要。在入站数据突然激增的情况下,套接字缓冲区应该足够大来处理它。

回答

2

在网络栈接收UDP数据包缓冲区的大小是有限的。如果缓冲区已满,则某些数据包将丢失。

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

相关问题