我正在进行服务器编程,并且遇到了10055错误。
我有一个TCP客户端应用程序,可以模拟大量客户端。
听说65534是一台计算机的tcp客户端连接的最大值, 我使用Asio来实现启动50000异步tcp连接的模拟客户端。
伪代码:
for (int i=0: i<50000 ; ++i)
asyn_connect(...);
开发环境是:
windows xp,x86,4G内存,4核CPU
HKLM \系统\ CurrentControlSet \服务\ TCPIP \参数\ MaxUserPort的= 65000
结果是:
当连接达到17000时,会发生10055错误。
我尝试了另一台计算机,错误发生在30000个连接,更好但不够好。 (服务器应用程序在另一台计算机上运行,也使用Asio)。
问题是: 如何在一台计算机上成功启动50000客户端连接?
答案 0 :(得分:0)
Cou可以尝试更多地阻塞:
例如。从10000个连接开始。只要5000个连接成功,就会启动接下来的5000 async_connect
次呼叫。然后重复一遍,直到达到目标。这至少可以减轻IO完成端口的压力。如果它不起作用,我会尝试使用更小的块。
但是,取决于操作系统耗尽的内存仍然无法帮助。
连接成功后是否直接启动异步读取?这些也会耗尽内存资源。