服务器和客户端都有Java NIO?

时间:2011-11-24 12:08:44

标签: java sockets nio socket.io

我是Java NIO的新手。我有一点怀疑。如果我使用NIO而不是套接字客户端,那么服务器是否也应该使用NIO或无关紧要?

我关注应用程序的可伸缩性。我正在查看每台服务器每秒大约500-1000个客户端请求。由于我将数据发送到至少三个不同的服务器,因此我理想地每秒查看大约1500个客户端请求。为此,我已经有一个套接字池实现,它做了相当不错的工作。

我所拥有的是每个服务器的套接字连接池。每个线程从池中获取可用的套接字连接并将其发送到服务器

我试图找出NIO是否可以提供帮助,或者以任何方式比套接字客户端更好。 封锁怎么样?普通客户端会阻塞或超时。

2 个答案:

答案 0 :(得分:4)

没关系。您选择的NIO不会影响TCP流。

答案 1 :(得分:2)

通过使用NIO,您将无法从客户端获得更多性能。瓶颈将是服务器或网络。此外,NIO更复杂,你可能会遇到一些会影响性能的错误。

我首先要做一个socket实现,以便更快地运行它。如果您遵循一些常见的模式/原则(如单一责任原则),以后可以轻松切换实施(如果您或您的用户已经证明您的应用程序性能是我发现的极不可能的瓶颈)。

更新

NIO或任何其他异步框架允许多个操作共享相同的线程。处理大量连接时每个连接有一个线程是浪费资源,因为所有线程都不会一直处于活动状态。

如果您只有几个连接,则为客户端使用NIO不会给您带来任何好处。每个连接有一个线程+套接字不会消耗那么多资源,并且处理连接会更容易。