我正在用 Go 开发 TCP 服务器,它应该能够同时接受最多 500 个客户端连接。
我正在使用它net.Listen("tcp4", listenerAddress)
来创建我的 TCP 侦听器。
我在 Linux 上遇到了一个问题,当所有 500 个客户端同时连接时 - TCP 接受队列会被填满。在我的 Linux 系统上,这个队列是 128。所以我通过内核参数增加队列大小来解决这个问题:sysctl -w net.core.somaxconn=512
。
但是如何在 Windows 中实现这一点?在我的 Windows Server OS 上,队列大小似乎固定为 200。我没有看到任何可以使用 Go 语言功能传递给侦听器的参数,而且我对 Windows 系统也不是很熟悉,所以也没有找到任何通过操作系统修复的方法。目前,每当我尝试大约 300-400 个同时客户端时,队列就会被填满,客户端会被拒绝。提高侦听器线程性能或优先级(它接受客户端的速度)在这里也不是一种选择,因为所有客户端基本上都可以同时连接。不要误会我的意思,当它们不是突发时,服务器能够处理 500 个连接,同时打开它们。