套接字编程-Java - 许多客户端一个套接字问题

时间:2009-11-12 04:02:22

标签: java android coldfusion

基本上我试图让许多java客户端连接到我的ColdFusion服务器上的套接字(使用套接字网关)。然而,在我开始编码之前,我对插座及其性能有点困惑。首先,套接字是针对连接到一台服务器上的一个套接字(比如端口2202)的许多(1000+)客户端吗?如果等待的所有内容基本上都是ping,或者当这些客户端收到此“ping”时它们可以获得一些新数据,那么性能如何呢。

谢谢, 费萨尔阿比德

4 个答案:

答案 0 :(得分:6)

套接字由以下元组标识,

  1. 来源IP
  2. 源端口
  3. Dest IP
  4. 目的港
  5. 协议(TCP或UDP)
  6. 即使1000个客户端都连接到同一个端口(目标端口),每个客户端都将获得自己的套接字。所以你将打开1000个插座。

    使用阻塞I / O维护1000个套接字很困难,这通常意味着1000个线程。你需要使用NIO。我们有一个用Mina编写的服务器,它可以在峰值处理2000个连接。

答案 1 :(得分:2)

  

首先,是插座的意​​思   许多(1000+)个客户连接到一个   一台服务器上的socket(例如端口2202)

是的,您的服务器将在端口2202上打开一个套接字,并且1000客户端将连接到它。 服务器打开服务器套接字,客户端将打开客户端套接字,它不同。

  

如果所有的话,表现如何   等待基本上是ping,或者   这些客户的事情   收到这个“ping”他们可以得到   一些新数据

在服务器上,使用getInputStream函数从客户端获取数据,使用getOutputStream函数向客户端发送数据。

注意:您应该使用Thread来处理客户端的每个请求

答案 2 :(得分:1)

使用阻塞I / O的许多套接字客户端没有任何问题(您可以查看this article以获取更多相关信息)。但是,还有另一种方法可以更好地满足您的需求:

答案 3 :(得分:0)

使用简单的Java套接字编程同时连接1000个客户端并不是完美的方法。问题是在fedora linux默认最大文件中没有文件可以打开1024,而在windows中它是2048或类似的东西。因此,在您的服务器端,您将发现超过1000个文件打开,之后如果客户端将继续增加,那么您将发现太多文件opnened错误。所以更好的方法是使用非阻塞套接字编程(我的意思是说使用SocketChannel)根据我的检查同时使用套接字通道我们可以连接20,000个客户端而没有任何问题。

所以最好使用nio。有一本非常好的书来自Oreilly出版的java nio。 我用过java nio(套接字通道)

由于 Sunil Kumar Sahoo