2

我有一个使用 TCP IP 连接用 C++ 编写的 winsock IOCP 服务器。我已经在本地测试了这个服务器,使用环回地址和客户端模拟器。我已经能够毫不费力地接待超过 60,000 名客户。我遇到的问题是当我在我家运行服务器和在朋友家运行客户端模拟器时。一切正常,直到我们达到大约 3700 个连接,之后每次调用 connect() 从客户端失败并返回 10060(这是 winsock 超时错误)。昨晚这个数字是3700,之前一直在300左右,我们也看到接近1000。但是不管是什么数字,每次我们尝试模拟它,它都会在这个数字附近失败(在10左右) .

两台计算机都使用 Windows 7 Ultimate。我们还将 TCPIP 注册表设置 MaxTcpConnections 修改为 1600 万左右。我们还将 MaxUserPort 设置从默认值 5000 更改为 65k。事件查看器中没有显示任何有用的信息。我们还观察了我们的资源监视器,我们甚至没有达到 1% 的网络利用率,CPU 也接近 0% 的使用率。

我们刚刚和我们的 ISP 通了电话,他们说他们并没有以任何方式限制我们,但那家伙有点不确定,最终在 30 分钟的等待时间后挂断了我们......

我们正在尽一切努力解决这个问题,但无法提出解决方案。如果有人可以帮助我们解决这个问题,我将非常感激。

PS 两台计算机都在 Verizon FIOS 上,使用相同的 verizon 路由器。还有一点需要注意,服务器使用的是 WSAAccept 而不是 AcceptEx。客户端模拟器试图在几秒钟内连接,所以我很确定连接没有积压。我们试图改变客户端模拟器的连接速度,无论它设置什么速度,它每次都会失败大约相同的数字。

更新我们在网络 A 上模拟了 2 个独立的客户端(在 2 台不同的机器上)。服务器在网络 B 上运行。每个客户端只能连接一半(大约 1600 个)到服务器的连接。我们最初使用低于 1,000 的端口,现在已更改为高于 50,000。两台机器上的路由器日志都没有显示。我们都在使用 Actiontec MI424WR verizon FIOS 路由器。这让我相信问题不在于客户端代码。服务器不会引发错误,也不会出现意外行为。这可能是 ISP/路由器问题吗?

更新已找到解决方案。我们使用的 verizon 路由器(MI424WR 修订版 C)无法处理超过 3700 个连接,我们使用一组单独的网络对此进行了测试。谢谢你们的帮助!

谢谢 - 里克

4

1 回答 1

0

我会猜到这是 MaxUserPort 问题,但你说你已经改变了。改完后重启了吗?

在本地网络上完全相同的计算机上运行测试(这将使计算机脱离等式)。

问题可能是您的路由器之一不能胜任这项工作?

于 2011-08-31T06:19:41.460 回答