代码之家  ›  专栏  ›  技术社区  ›  Faisal Abid

套接字编程——Java——许多客户端一个套接字问题(s)

  •  2
  • Faisal Abid  · 技术社区  · 15 年前

    本质上,我试图让许多Java客户端连接到我的CaldFieldServer上的套接字(使用Socket网关)。然而,在我开始编写代码之前,我对套接字及其性能有点困惑。首先,套接字是否适用于连接到一台服务器上的一个套接字(比如端口2202)的多个(1000多个)客户机?如果所有的等待基本上都是ping,或者当这些客户机接收到这个“ping”时,他们可以得到一些新的数据,那么性能如何呢?

    谢谢, 阿比德

    4 回复  |  直到 14 年前
        1
  •  6
  •   ZZ Coder    15 年前

    套接字由以下元组标识,

    1. 源IP
    2. 源端口
    3. 最大IP
    4. 目标端口
    5. 协议(TCP或UDP)

    即使1000个客户机都连接到同一个端口(dest端口),每个都将获得自己的套接字。所以你将有1000个插座打开。

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

        2
  •  2
  •   misamap    15 年前

    首先,插座是用来 多个(1000多个)客户端连接到一个 一台服务器上的套接字(例如端口2202)

    是的,您的服务器将在端口2202上打开一个套接字,1000个客户机将与其连接。 服务器打开服务器套接字,客户端将打开客户端套接字,这是不同的。

    如果有的话表演怎么样 等待基本上是一个ping,或者 当这些客户 收到这个“Ping”,他们可以去拿 一些新数据

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

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

        3
  •  1
  •   denis.zhdanov    15 年前

    许多使用阻塞I/O的套接字客户机没有任何问题(您可以看一下 this article 更多信息)。但是,还有其他方法可以更好地满足您的需求:

        4
  •  0
  •   Sunil Kumar Sahoo    14 年前

    与1000个客户端同时使用简单的Java套接字编程并不是完美的方法。问题在于,在Fedora Linux中,可以打开的文件的最大值是1024,而在Windows中,它是2048或类似的文件。因此,在服务器端,您将发现打开了1000多个文件,然后如果客户机继续增加,那么您将发现有太多的文件处于开启状态错误。因此,更好的方法是使用非阻塞套接字编程(我的意思是使用socket channel),同时使用套接字通道,根据我的检查,我们可以与20000个客户机连接,没有任何问题。

    所以最好使用NIO。有一本很好的书来自奥利利出版的Java NIO。 我已经使用了Java NIO(套接字通道)

    谢谢 苏尼尔·库马尔·萨胡