Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets Windows Server 2003中打开的套接字数量的上限是多少_Sockets_Networking_.net 3.5_Windows Server 2003 - Fatal编程技术网

Sockets Windows Server 2003中打开的套接字数量的上限是多少

Sockets Windows Server 2003中打开的套接字数量的上限是多少,sockets,networking,.net-3.5,windows-server-2003,Sockets,Networking,.net 3.5,Windows Server 2003,我正在用.NET构建一个聊天服务器。我尝试打开大约2000个客户端连接,每次我的Linksys WRT54GL路由器(带有番茄固件)都会死机。当我在Azureus bit torrent客户端上打开多个连接时,也会发生同样的情况 我有三个问题: Windows Server 2003中打开的套接字数量有限制吗 Linksys路由器是问题所在吗?如果有,是否有更好的硬件推荐 有没有一种方法可以共享套接字,这样我就可以用更少的资源处理更多的开放客户端连接 正如我之前提到的,他对这类问题有很好的建议:

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

我有三个问题:

  • Windows Server 2003中打开的套接字数量有限制吗
  • Linksys路由器是问题所在吗?如果有,是否有更好的硬件推荐
  • 有没有一种方法可以共享套接字,这样我就可以用更少的资源处理更多的开放客户端连接
  • 正如我之前提到的,他对这类问题有很好的建议:如果你不得不问操作系统的限制,你可能做错了什么。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
    
    然后,服务器执行以下操作:

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


    希望这能让你思考。

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

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


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

    我的Windows 7计算机上的可用套接字有好几天的问题。在阅读了一些关于Win7中插座泄漏的文章后,我应用了一个-没有任何变化

    下面有一篇文章详细介绍了windows连接问题:

    对我来说,它的作用如下:

    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
    
  • 打开Regedit
    • HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters:创建TcpNumConnections,REG\u DWORD,十进制值500(可根据需要设置);EnableConnectionRateLimiting,REG_DWORD,值为0
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip:创建MaxUserPort,REG_DWORD,十进制值65534
  • 重新启动Windows

  • 斯基兹:谢谢,但我无法从你提供的链接中找到相关文章。如果我能从一个盒子里拿到50千块钱,那很好,你能告诉我你自己用过的这些好资源吗。感谢这个网站谈论了很多关于系统的东西,偶尔也会有关于系统限制的评论,这些评论通常用上面的陈述来回答。如果您需要50000个连接,那么在需要50001个连接的那一天会发生什么?您需要使用一个连接并使其能够处理50k聊天。每发送一条消息,是否打开和关闭连接?这种规模会有多大?我一直在读一些书,我知道如果我所有的通信都是异步的,那么当有数据可以通过写/读端处理时,我可以让大多数套接字休眠和唤醒。你的想法。老实说,我不是这方面的专家。但我敢肯定,每次聊天一个套接字的方法是有缺陷的。Hotmail的即时通讯是如何做到的?他们一次的聊天次数肯定超过5万次。斯基兹:你的例子有缺陷。服务器不应打开与用户的连接,因为用户通常位于防火墙后面。这就是为什么在IM客户端中保持连接打开(或使用UDP)是相关的