我在 Windows Web Server 2008 VPS 上运行我自己的用 .net 4.5 制作的游戏服务器。我对我遇到的一个问题做了一些研究。如果已经有 1000 个客户端连接,我的应用程序将不接受客户端。这个应用程序基本上是一个运行六个 Socket 服务器(每个服务器在不同的端口上)的进程,并且其代码对连接的客户端没有任何限制。以下是一些统计数据:
-------------------------------Server ID: 0 stats
[22-03-2014 14:37:39] Stats: Players online: 160
[22-03-2014 14:37:39] Stats: Connections: 164
-------------------------------Server ID: 1 stats
[22-03-2014 14:37:39] Stats: Players online: 515
[22-03-2014 14:37:39] Stats: Connections: 535
-------------------------------Server ID: 2 stats
[22-03-2014 14:37:39] Stats: Players online: 108
[22-03-2014 14:37:39] Stats: Connections: 111
-------------------------------Server ID: 3 stats
[22-03-2014 14:37:39] Stats: Players online: 59
[22-03-2014 14:37:39] Stats: Connections: 61
-------------------------------Server ID: 4 stats
[22-03-2014 14:37:39] Stats: Players online: 74
[22-03-2014 14:37:39] Stats: Connections: 75
-------------------------------Server ID: 5 stats
[22-03-2014 14:37:39] Stats: Players online: 52
[22-03-2014 14:37:39] Stats: Connections: 54
-----------------------------------Total stats
[22-03-2014 14:37:39] Stats: Total players: 968
[22-03-2014 14:37:39] Stats: Total connected: 1000
“玩家”客户端是已登录的玩家,“已连接的客户端/连接”是一次监听的套接字数量(已登录的玩家 + 登录的玩家)。这是 Windows Web Server 2008 的限制吗?
答案1
在我看来,由于您使用的是 2008 Web 版,您可能违反了许可协议:
从这里:
Windows Web Server 2008 专门设计为单一用途的 Web 服务器。它仅用于通过 Internet 访问网页、网站和 Web 应用程序的前端 Web 服务。
无论如何,Server 2008 的 Web 版本确实有 10 个同时连接的限制半开TCP 连接,但根据这位微软员工:
这取决于版本,Web 版和 Foundation 版有连接限制,而 Standard、Enterprise 版和 Datacenter 版没有。
但如果你一直看到连接数卡在 1000 上,那么我还不能确定你的问题出在半开 TCP 连接上。如果不仔细检查你的代码,我就无法告诉你更多。
但是您可能还是应该放弃 Web 版,因为您使用它来做其他事情,而不是运行 Web 服务器。因此,根据您提供的信息,我认为您得到的最佳答案是“否”,操作系统或 .NET 框架对活动 TCP 连接数没有限制,不超过 1000 个。它能够处理比这多得多的连接数。
编辑:我想您可以尝试将注册表项更改HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableConnectionRateLimiting
为 0,但这可能会或可能不会起作用,因为您的 Windows Server 是 Web 版,并且可能会使您遭受拒绝服务攻击(如果您实际上遇到了半开 TCP 连接的问题,我还不确定您是否遇到了。运行 netstat 并查看是否有一堆连接似乎卡在 SYN_SENT 状态。)