很难选择...... IO vs NIO

时间:2011-07-21 19:18:40

标签: java multithreading

我想问一下在开发类似于SmartFoxServer的服务器时选择什么更合适。我打算开发一个类似但不同的服务器。在开发上述服务器的基准测试中,他们有10000个并发客户端。 我对使用太多线程(> 500)的成本进行了一些研究,但无法决定走哪条路。我曾经在java中创建了一个服务器,但那是一个小应用程序而且与重负载无关。

由于

3 个答案:

答案 0 :(得分:2)

看看Apache Mina。他们已经完成了很多在网络应用中有效使用NIO所需的繁重工作。 NIO是否增加了处理并发连接的能力,这取决于你的实现,但是Tomcat,JBoss和Jetty的性能提升已经为你提供了充分的证据。

答案 1 :(得分:1)

我不熟悉smartfoxserver,所以我只能说一般(这并不总是好的:P但我会去)

我认为这是两个不同的问题。一方面,使用本机java套接字与用c语言编写的本机套接字(如tomcat)时的io性能。

另一个问题是如何扩展到那种并发级别。除此之外,我总是选择原生套接字(即:c)。

现在,如何扩展:让很多线程同时运行(os约束等)并不是一个好主意,所以我选择水平扩展,这意味着添加一个可以发送的负载均衡器可以通过使用消息链接到不同服务器的请求(使用jms,如rabbitmq或activemq,甚至使用stomp或amqp等协议)。

其他解决方案,一个允许您根据需要增加安装的云环境

答案 2 :(得分:1)

在大多数测试10K或100K连接的基准测试中,服务器没有工作,除非你的服务器什么也没做,否则这些测试是不现实的。

您需要清楚地了解要支持的许多并发连接。

如果连接数少于1K,则每个连接使用一个线程都可以正常工作。这是最简单的方法。如果您的请求非常简单,那么使用带有NIO的调度程序模型可以更好地工作。否则无关紧要。

如果你有超过1K的连接,你可能想要使用多个服务器,因为每个连接的核心不到1%,基本服务器的成本现在相对便宜。