Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务器和客户端中的JavaNIO?_Java_Sockets_Nio_Socket.io - Fatal编程技术网

服务器和客户端中的JavaNIO?

服务器和客户端中的JavaNIO?,java,sockets,nio,socket.io,Java,Sockets,Nio,Socket.io,我是JavaNIO新手,我有一点怀疑。如果我使用NIO而不是socket客户机,那么服务器是否也应该使用NIO呢 我关心的是应用程序的可伸缩性。我看到每台服务器每秒大约有500-1000个客户端请求。由于我会将数据发送到至少三个不同的服务器,因此理想情况下,每秒大约有1500个客户端请求。为此,我已经有了一个套接字池实现,它做得相当不错 我拥有的是每个服务器的套接字连接池。每个线程从该池中提取一个可用的套接字连接并将其发送到服务器 我试图找出NIO是否能提供帮助,或者在任何方面是否比套接字客户端

我是JavaNIO新手,我有一点怀疑。如果我使用NIO而不是socket客户机,那么服务器是否也应该使用NIO呢

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

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

我试图找出NIO是否能提供帮助,或者在任何方面是否比套接字客户端更好。
拦网怎么样?正常的客户端会阻塞或超时。

这没关系。TCP流将不受您选择的NIO的影响。

我想您不会通过使用NIO从客户端获得更多性能。瓶颈将是服务器或网络。此外,NIO更为复杂,很可能会出现一些会影响性能的错误

我会先做一个socket实现,让它更快地启动和运行。如果您遵循一些常见的模式/原则,如单一责任原则,那么以后很容易切换实现(如果您或您的用户已经证明您的应用程序性能是瓶颈,我认为这是不太可能的)

更新

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


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

NIO在服务器中不是比在客户机中更有益吗?我不明白为什么这是客户端的要求而不是服务器的要求?@jgauffin我只关心客户端。服务器是第三方应用程序,我通过TCP向其发送数据。我只想最大限度地提高我的客户的绩效。我正在考虑我的选择。那么,将NIO用作客户机与普通的套接字客户机相比,这是一个好主意吗?我想,使用NIO不会使客户机获得更多的性能。瓶颈将是服务器或网络。此外,NIO更为复杂,很可能会出现一些会影响性能的错误。保持简单并完成应用程序。当你说
为客户机使用NIO时,如果你只有几个连接,就不会给你带来任何好处那么NIO在什么情况下会有用?在我的实现中,比如说一个池中有50个套接字连接,每秒有500个线程使用/重用。所以我没有每个线程的连接模型。有500个线程吗?那些线在干什么?您使用的是linux/osx还是windows?我使用的是windows server 2008 64位。简单地说,我的应用程序就像一座桥梁。它每秒获得500个web服务请求。为每个web服务请求创建一个线程,任务是通过tcp将请求传输到目标。如果我必须将它发送到3个目的地,那么每个请求将创建3个线程。我不会在windows计算机中使用500个线程。线程上下文切换在windows中不如在linux中便宜。使用NIO来接收web请求会更有效率。@jgauffin这是一个可疑的断言。NIO将调度移到您的代码中,特别是移到select()调用中,以及随后在所选键集上的循环中。您的应用程序将成为调度程序。使用NIO,并发的可能性为零;有了线程,你就可以免费获得它。+1:事实上,你的客户机或服务器可以是C或PHP或一些你从未听说过的平台。这同样适用于Java7中的NIO2。