【发布时间】:2017-06-19 00:49:29
【问题描述】:
我正在尝试优化 UDP 服务器以处理更多吞吐量,它基于 Java IO 数据报套接字(不是 NIO)。 当这个 UDP 服务器收到一个 UDP 数据包时,它需要处理这个数据包,并将处理后的数据发送到后台资源,然后响应客户端。 目前该服务器将为每个传入的数据包分配一个线程来处理。
我读过一些文章,我明白了 对于某些情况,例如基于 TCP 的聊天服务器: 需要同时管理数千个打开的连接,每个连接只发送少量数据,在 NIO 中实现服务器可能是一个优势。 很少有线程可以处理大量连接(每个请求的线程),因为在给定时间点只有少数连接向服务器发送请求。所以,我们不需要为每个连接维护一个线程。 这是使用 Java TCP NIO 的巨大优势。
而在 UDP 中,每个数据包(数据报)实际上是一个自包含的消息,每个数据包都可以视为一个请求,即使我们使用 NIO 数据报通道,我们仍然需要为每个请求创建一个线程。
那么,使用 NIO Datagram 通道有什么好处呢?
【问题讨论】: