我正在尝试优化UDP服务器以处理更大的吞吐量,它基于Java IO数据报套接字(不是NIO)。
当此UDP服务器接收到UDP数据包时,它需要处理此数据包,并将处理后的数据发送到后台资源,然后响应客户端。
当前,该服务器将为每个要处理的传入数据包分配一个线程。

我读过一些文章,我知道
在某些情况下,例如,基于聊天服务器的TCP:
它需要同时管理数千个打开的连接,每个打开的连接仅发送少量数据,因此在NIO中实现服务器可能是一个优势。
很少有线程可以处理大量连接(每个请求线程),因为只有少数几个连接在给定的时间点将请求发送到服务器。因此,我们不需要为每个连接维护一个线程。
这是使用Java TCP NIO的巨大优势。

在UDP中,每个数据包(数据报)实际上都是一条独立的消息,每个数据包也可以视为一个请求,即使我们使用NIO数据报通道,我们仍然需要为每个请求创建一个线程。

那么,使用NIO数据报通道有什么优势?

最佳答案

即使我们使用NIO Datagram通道,我们仍然需要为每个请求创建一个线程


为什么?如果您是回声服务器,时间服务器,则不然……这全都取决于您在做什么。

而且,如果您的应用程序使客户端保持请求(而不是一次性请求:例如时间或DNS),则可以考虑按客户端而不是按请求使用线程。

您的假设经不起审查。

但是,NIO确实超卖了,而且大多数应用程序都不需要它。有一些服务器以阻塞模式支持成千上万的连接。

关于java - 与数据报套接字相比,使用数据报 channel 有什么优势,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44620893/

10-12 03:24
查看更多