首页 文章

我在Windows Server 2003中可以拥有的打开套接字数量的上限是多少

提问于
浏览
2

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

我有三个问题:

  • 我在Windows Server 2003中可以拥有的打开套接字数量是否有限制?

  • Linksys路由器是问题吗?如果是这样,建议使用更好的硬件?

  • 有没有办法可能共享套接字,以便我可以用更少的资源处理更多的开放客户端连接?

4 回答

  • 2

    正如我之前提到的那样,Raymond Chen对这类问题提出了很好的建议:如果你不得不询问操作系统的限制,那么你肯定有很多很好的资源可以描述这样的系统,而且肯定有人会有很好的想法关于它 .

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

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

    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进行响应 . 然后,客户端发送包含用户键入的消息的数据包,服务器处理它们并将消息转发给同一会话中的其他客户端 . 当客户端离开聊天时,它会向服务器发送“结束会话”消息 . 服务器从会话中删除客户端,并在会话中没有其他客户端时销毁会话 .

    希望能让你思考 .

  • 2

    当我为Windows XP搜索类似的东西时,我发现了这个(http://smallvoid.com/article/winnt-tcpip-max-limit.html),我认为这应该适用于Windows 2003

  • 2

    我找到了一些我认为应该分享的答案:

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

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

  • 1

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

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

    对我而言,它的工作原理如下:

    • 打开Regedit

    • 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

    • 重新启动Windows

相关问题