2012-05-11 33 views
0

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

+0

有像netty和灰熊这样的多个高性能nio库,它们应该适合你。 – Bill

回答

0

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

我认为现有的Java实现已经相当不错了。例如,Selector类将系统调用包装为等待多个文件描述符。几乎没有什么可以提高效率的。

0

我建议你不理解NIO的要点,即只使用一个线程。这当然是复杂的,并且在1000名客户以下是否有任何需求可能是有争议的,可能是10,000,甚至可能是100,000。我会用java.net实现你的服务器,让它运行并为阶段2保存java.nio,如果你到达那里并证明你确实需要它。

编辑:我肯定会忘记这个滚动自己的概念。你大大低估了这项任务(Sun 1.4.0,1.4.1,1.4.2在它确实正常工作之前),而你似乎正在瞄准两全其美。因为没有更多的东西,所以你不能比Sun用java.nio做更多的事情。可以说少一点;-)

+0

首先它是一个好主意。第二我可以在一个线程中完成所有操作。是不是那个妞呢?为每个tesk运行一个新线程并在之后进行cloae? –

+0

@AsafNevo您需要为java.net每个连接创建一个单独的线程。 – EJP

相关问题