我使用在一个端口上运行的serversocketchannels构建了一个java TCPServer。但是,它不是很可扩展,因为它只关注一个传入套接字(阻塞模式)。
我想扩展此TCPServer以服务多个传入套接字(最多10个传入套接字)。因此,我想知道我是否应该使用非阻塞io或使用线程+阻塞io来实现TCPServer。
答案 0 :(得分:0)
Paul Tyma最近compared这两种方法,产生diverse discussion。在某些情况下,现代线程库可以胜过java.nio.channels.Selector
。由于结果有些违反直觉,您可能必须对两者进行原型设计以获得明确的答案。
答案 1 :(得分:0)
JBoss-Netty或Apache-Mina是nio框架,它提供了很多东西来实现自己的服务器。所以,现在我正在使用netty并对它感到满意。
答案 2 :(得分:0)
只有10个传入插座,我认为效果不明显。您应该做的是关注上层(协议,应用程序)并将该低级网络实现留给框架。我会推荐Apache Mina来完成这项工作。正如您将看到的,我选择阻止或非阻塞的工作非常好;并为您提供开放接口以实现协议&应用
答案 3 :(得分:0)
我会使用线程并阻止I / O,直到您知道至少有1000个并发连接。这也为您提供了一种简单的方法来实现它。当你到达1000时,评估。