我想接受大约5000个tcp客户端,它们试图一次完全连接
当我测试程序时,许多客户端可以真正地连接但很多人不能通过提供"由于目标机器主动拒绝它而无法建立连接。错误。
我增加了我的socket的listen方法的backlog参数,但它没有帮助
我使用的代码是带有this链接的msdn示例。有人可以帮助我吗?
答案 0 :(得分:3)
底层堆栈可以在忙于接受其他连接时拒绝连接(内部没有任何内容真正并行)。如果你真的需要一次连接那么多客户端,你可以稍微改变一下客户端逻辑:重新连接失败(如评论中提出的那样)。或者,您可以在不同端口上的不同线程上启动多个侦听器,并在客户端选择通过fair dice连接的端口。
答案 1 :(得分:0)
您可能希望了解如何使用SocketAsyncEventArgs对象。然后你可以接受套接字来处理初始连接,一旦建立了连接,接受套接字就会把它交给一个worker SocketAsyncEventArgs对象。
查看此项目以开始使用它。 http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
我发现使用这种技术效果非常好,但是你会遇到操作系统和硬件的限制。我测试了我的tcp服务器(在Windows服务器2008 R2上运行),它使用SocketAsyncEventArgs对象,有几千个连接,它成功运行,没有客户端被拒绝(不得不为此增加积压)。问题在于,建立连接的客户端和服务器之间的时间以及客户端获得响应的时间随着同时连接请求数量的增加而增长。