过去几天我一直在阅读构建 java 套接字服务器时 io 和 nio 之间的区别。对于我的使用,我需要一个可以运行大量连接的服务器,并且 ion 应该可以解决问题。我唯一担心的是,它比为每个连接运行一个线程更慢且更难实现。所以我想为什么我不使用相同的线程易用性和 java.nio 的逻辑并构建一个服务器有一个线程来检查所有打开的连接,当有新事件时,它会打开一个新线程来处理它. 我认为这样我就可以享受这两个世界了……你有什么建议?
2 回答
NIO almost entirely relies on JNI, so if you want to implement it again, you'll actually have to write loads of C/++ and OS API interface code.
I think the existing Java implementations are already quite good. For example, the Selector class wraps the system call for waiting on multiple file descriptors. There's hardly anything you can do to improve the efficiency of that.
我建议你不要理解 NIO 的意思,就是只使用一个线程。这当然很复杂,并且在 1000 个以下的客户(可能是 10,000 个,甚至可能是 100,000 个)以下,您是否需要它是有争议的。如果您到达那里并向自己证明您确实需要它,我将使用 java.net 实现您的服务器以使其运行并为第 2 阶段保存 java.nio。
编辑:我当然会忘记滚动自己的概念。您大大低估了这项任务(它需要 Sun 1.4.0、1.4.1、1.4.2 才能真正正常工作),并且您的目标似乎是两全其美。与 Sun 对 java.nio 所做的相比,您将无法从中得到更多,因为没有更多了。可以说少了一点;-)