我正在使用.NET构建聊天服务器。我尝试打开大约2000个客户端连接,我的Linksys WRT54GL路由器(带有番茄固件)每次丢失。当我在Azureus bit-torrent客户端上打开多个连接时,会发生同样的事情。
我有三个问题:
答案 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
对我而言,它的工作原理如下: