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

时间:2009-02-27 11:05:55

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

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

我有三个问题:

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

4 个答案:

答案 0 :(得分:2)

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

希望能让你思考。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

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

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

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

  1. 打开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
  2. 重新启动Windows