如何启动大量的tcp客户端连接

时间:2014-01-30 23:18:04

标签: sockets boost-asio

春节快乐 - 中国新年。

我正在进行服务器编程,并且遇到了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客户端连接?

1 个答案:

答案 0 :(得分:0)

Cou可以尝试更多地阻塞: 例如。从10000个连接开始。只要5000个连接成功,就会启动接下来的5000 async_connect次呼叫。然后重复一遍,直到达到目标。这至少可以减轻IO完成端口的压力。如果它不起作用,我会尝试使用更小的块。

但是,取决于操作系统耗尽的内存仍然无法帮助。

连接成功后是否直接启动异步读取?这些也会耗尽内存资源。