我正在用.NET构建一个聊天服务器.我尝试打开大约2000个客户端连接,我的Linksys WRT54GL路由器(带有番茄固件)每次丢失.当我在Azureus bit-torrent客户端上打开多个连接时,会发生同样的事情.
我有三个问题:
>我在Windows Server 2003中可以拥有的打开套接字数量是否有限制?
> Linksys路由器是问题吗?如果是这样,建议使用更好的硬件?
>有没有办法可能共享套接字,以便我可以用更少的资源处理更多的开放客户端连接?
正如我之前提到的,Raymond Chen对这类问题提出了很好的建议:如果你不得不询问操作系统限制,那么你可能做错了什么. IP协议最多只允许65535个端口,其中许多端口是保留的,不能用于一般用途.我建议您需要更详细地考虑您的消息传递协议,以便OS限制不是问题.我确信有很多很好的资源来描述这样的系统,这里肯定会有人对它有很好的想法.
编辑:我将对实现可扩展的聊天服务器提出一些想法.
首先,在服务器上指定一个端口,供客户端进行通信.每当客户端需要更新聊天状态(例如,新的用户消息)时,请执行以下操作:
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进行响应.然后,客户端发送包含用户键入的消息的数据包,服务器处理它们并将消息转发给同一会话中的其他客户端.当客户端离开聊天时,它会向服务器发送“结束会话”消息.服务器从会话中删除客户端,并在会话中没有其他客户端时销毁会话.
希望能让你思考.