基本上,我正在尝试让许多Java客户端连接到我的ColdFusion服务器上的套接字(使用Socket网关)。但是,在我开始编写代码之前,我对套接字及其性能有些困惑。首先,套接字是否适用于许多(1000+)客户端连接到一个服务器上的一个套接字(例如端口2202)?如果所有等待的只是基本的ping或类似的东西,那么它的性能如何,以便这些客户端在接收到这个“ping”时可以获取一些新数据。
谢谢, Faisal Abid
谢谢, Faisal Abid
Socket是通过以下元组进行标识的:
即使1000个客户端都连接到同一个端口(目标端口),每个客户端也将获得自己的套接字,因此你将有1000个打开的套接字。
使用阻塞I/O来维护1000个套接字通常意味着需要1000个线程,这将会非常困难。你需要使用 NIO。我们使用 Mina 编写了一个服务器,可以处理最多2000个连接。
嗨,使用简单的Java套接字编程一次连接1000个客户端,并不是最完美的方法。问题是,在Fedora Linux中,默认的最大打开文件数是1024,在Windows中是2048或类似的数值。因此,在服务器端,你会发现打开超过1000个文件,之后如果客户端继续增加,你将会遇到太多打开文件的错误。所以更好的方式是使用非阻塞套接字编程(我的意思是使用SocketChannel)。根据我的检查,使用SocketChannel同时可以连接20000个客户端而无任何问题。
所以最好使用NIO。有一本非常好的关于Java NIO的O'Reilly出版物。我已经使用过Java NIO(Socket Channel)。
谢谢 Sunil Kumar Sahoo