使用Java NIO(Netty?)编写的Web服务客户端

4
我已经编写了一个简单的客户端来测试我的Web服务,但我正在调查使用JBoss Netty框架的可能性,而不是使用阻塞套接字,以增加我可以向Web服务建立的并发连接数。
我知道JBoss本身使用Netty,但我目前正在使用Tomcat,并且对它没有任何了解。是否有人做过这个,或者使用类似的东西?

无论您使用 NIO 还是普通的 IO,您都可以使用多达 10K 并发连接。IO 在执行此操作时会占用更多资源,但如果您有足够的内存或少于 1K 并发连接,则不太可能注意到明显的差异。顺便说一句,我很好奇您是否能看出区别。 - Peter Lawrey
但是如果每个连接都阻塞了一个线程,那么我不是受到可以创建的线程数量的限制吗? - trojanfoe
是的,但问题在于你的并发是否会达到那个级别?现代操作系统/JVM组合通常可以支持高达低千个线程,如果大多数时间都是非活跃状态。 - StaxMan
2个回答

6

不要试图将其他人的Socket处理库集成到Tomcat中,为什么不开启Tomcat的NIO服务呢?虽然可能需要升级到Tomcat 6.0,但根据您对JBoss的经验,这可能是更简单的解决方案。


这是一个有用的答案,因为我可能会在服务器的可扩展性方面遇到问题,但是我想在测试客户端中使用Netty(或其他),而不是服务器。 - trojanfoe
这个应该得到更多的赞,非常实用的提示,我甚至没有意识到这是一个选项。使用直接字节缓冲区的NIO Tomcat非常不错。谢谢Edwin。 - Riyad Kalla
1
值得注意的是,这仅涵盖了Servlet处理的一部分--您实际的请求处理仍需要绑定到一个线程(至少对于常规的Servlet API而言)。它可能很有用,但取决于大部分时间花在哪里,不一定足够。 - StaxMan

3

我们在实现中都使用了Netty和MINA。这两种技术都包装了底层的Java NIO类,使得事情变得更加轻松和简洁。在比较这两者时,我们选择了Netty。我们发现Netty更容易使用,并为我们提供了更强大的NIO用途。我建议您查看此帖子,因为它对两者进行了相当好的比较。


你可以问一下你所指的实现是什么?你是自己编写Web服务API还是修改了现有的实现? - trojanfoe
所以我们使用JBossWS作为我们的Web服务提供者(但现在我们几乎将所有内容都转移到了REST服务)。我们还单独使用Netty进行流处理。我非常确定根据我在JBoss WS上看到的堆栈跟踪,他们正在利用Netty。因此,您可能只想利用该库。 - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接