NIO 和 TCP 非常适合许多连接。由于需要为每个新客户端打开一个新连接,因此这些客户端中的每一个通常都需要自己的线程来阻塞 I/O 操作。NIO 解决了这个问题,它允许在可以读取数据时读取数据,而不是在数据可用之前阻塞。但是UDP呢?
我的意思是,无连接 UDP 不具有与之关联的 TCP 的阻塞特性,因为协议是如何设计的(基本上发送它并忘记它)。如果我决定将一些数据发送到某个地址,那么它会这样做,没有延迟(在服务器端)。同样,如果我想读取数据,我可以只接收来自不同来源的单个数据包。我不需要使用许多线程与许多地方建立很多连接来处理它们中的每一个。
那么,NIO 和选择器是如何增强 UDP 的呢?更具体地说,什么时候更愿意将 UDP 与 NIO 一起使用而不是 ol'java.net
包?