【问题标题】:What is the upper limit on the number of open sockets I can have in Windows Server 2003我在 Windows Server 2003 中可以拥有的打开套接字数量的上限是多少
【发布时间】:2010-10-10 07:25:21
【问题描述】:

我正在使用 .NET 构建一个聊天服务器。我尝试打开大约 2000 个客户端连接,我的 Linksys WRT54GL 路由器(带有番茄固件)每次都掉线。当我在 Azureus bit-torrent 客户端上打开多个连接时,也会发生同样的情况。

我有三个问题:

  1. 我在 Windows Server 2003 中可以拥有的打开套接字的数量是否有限制?
  2. 是 Linksys 路由器的问题吗?如果有,有没有更好的硬件推荐?
  3. 有没有办法共享套接字,以便我可以用更少的资源处理更多开放的客户端连接?

【问题讨论】:

    标签: sockets networking .net-3.5 windows-server-2003


    【解决方案1】:

    正如我之前提到的,Raymond Chen 对此类问题有很好的建议:如果您必须询问操作系统限制,您可能做错了什么。 IP 协议只允许最多 65535 个端口,其中许多是保留的,不能用于一般用途。我建议您需要更详细地考虑您的消息传递协议,以便操作系统限制不是问题。我敢肯定有很多很好的资源来描述这种系统,而且这里肯定有人对此有很好的想法。

    编辑:我将提出一些关于实现可扩展聊天服务器的想法。

    首先,在服务器上指定一个端口供客户端进行通信。每当客户端需要更新聊天状态(例如新的用户消息)时,请执行以下操作:

    create message packet
    open port to server
    send packet
    close port
    

    服务器然后执行以下操作:

    connection request received
    get packet
    close connection
    process packet
    for each client that requires updating
      open connection to clients
      send update packet
      close connection
    

    当开始新的聊天会话时,开始会话的客户端会向服务器发送一条“新会话”消息,其中包含客户端用户详细信息和 IP 地址以进行响应。服务器创建一个新的聊天会话并使用会话 ID 进行响应。然后客户端发送包含用户键入的消息的数据包,服务器处理它们并将消息转发给同一会话中的其他客户端。当客户端离开聊天时,它会向服务器发送“结束会话”消息。服务器将客户端从会话中移除,并在会话中没有更多客户端时销毁会话。

    希望这能让你思考。

    【讨论】:

    • Skizz:谢谢,但我无法从您提供的链接中找到相关文章。如果我可以从一个盒子中获得高达 50k 的收益,那很好,您能否指出您自己使用过的这些好资源之一。谢谢
    • 该网站谈论了很多关于系统的东西,偶尔会有关于系统限制的评论,通常用上述声明来回答。如果您需要 50k 连接,那么在需要 50001 的那一天会发生什么?您需要使用一个连接并使其处理 50k 聊天。
    • 每发送一条消息打开和关闭连接?这将如何扩展?我一直在做一些阅读,我知道如果我所有的通信都是异步的,当有数据可通过写/读端处理时,我可以让大多数套接字休眠和唤醒。你的想法。
    • 说实话,我不是这类事情的专家。但我确信每次聊天一个套接字的方法是有缺陷的。 Hotmail 的 IM 是如何做到的?他们必须同时进行超过 50K 的聊天。
    • skizz:你的例子有缺陷。服务器不应打开与用户的连接,因为它们通常位于防火墙后面。这就是为什么在 IM 客户端(或使用 UDP)中保持连接打开是相关的
    【解决方案2】:

    我找到了一些我觉得应该分享的答案:

    Windows 2003 服务器对可以使用的端口数有限制。但这可以通过注册表调整来配置,将 MaxUSerPort 设置从 5000 更改为 64k(最大值)。

    进一步探索,我意识到 64k 端口限制实际上是每个 IP 地址,因此单个服务器可以轻松获得更多端口,因此通过安装多个网卡或将多个 IP 地址绑定到一个 TCP 连接网卡。这样,您可以扩展您的系统以处理 n x 64k 端口。

    【讨论】:

      【解决方案3】:

      几天来,我的 Window 7 机器上的可用套接字出现问题。在阅读了一些关于 Win 7 中套接字泄漏的文章后,我申请了 Windows patch - 没有任何改变。

      下面有一篇文章非常详细地描述了windows连接问题: http://technet.microsoft.com/en-us/magazine/2007.12.network.aspx

      对我来说,它的工作原理如下:

      1. 打开注册表
        • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters:创建TcpNumConnections,REG_DWORD,十进制值500(这个可以根据自己的需要设置); EnableConnectionRateLimiting,REG_DWORD,值 0;
        • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip:创建 MaxUserPort,REG_DWORD,十进制值 65534
      2. 重启 Windows

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 2014-03-28
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多