为socket服务器实现我自己的java.nio

时间:2012-05-11 23:38:19

标签: java multithreading sockets nio

过去几天,我一直在阅读关于构建java套接字服务器时io和nio之间的区别。对于我的使用我需要一个可以运行大量连接的服务器和离子应该做的伎俩。 我唯一担心的是它实现起来有点慢,有点难,而不是为每个连接运行一个线程。所以我想为什么我不使用相同的线程和java.nio的逻辑和构建服务器有一个线程,它检查所有打开的连接,当有一个新的事件时,它将打开一个新线程来处理它。我想这样就可以享受这两个世界......你有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我建议你不明白NIO的意思,那就是只使用一个线程。这当然很复杂,你是否有足够的需求在1000个客户端以下,可能是10,000个,甚至可能是100,000个。我将使用java.net实现您的服务器以使其运行并保存java.nio用于第2阶段,如果您到达那里并向自己证明您确实需要它。

编辑:我当然会忘记这种滚动自己的概念。你大大低估了这个任务(在它真正正常工作之前需要Sun 1.4.0,1.4.1,1.4.2),而你似乎的目标是让两个世界都处于最糟糕的状态。你将无法获得比Sun更多的java.nio,因为现在已经没有了。可以说少一点; - )

答案 1 :(得分:0)

NIO几乎完全依赖于JNI,所以如果你想再次实现它,你实际上必须编写大量的C / ++和OS API接口代码。

我认为现有的Java实现已经非常好了。例如,Selector类包装系统调用以等待多个文件描述符。你几乎无法做任何事情来提高效率。