繁体   English   中英

使用c#一次接受多个tcp连接

[英]Accepting many tcp connections at one time using c#

我想接受大约5000个tcp客户端,它们正在尝试一次完全连接。
当我测试程序时,许多客户端可以真正地连接但很多人不能通过给出“因为目标机器主动拒绝它而无法建立连接”错误。
我增加了我的socket的listen方法的backlog参数,但它没有帮助我使用的代码是带有链接的msdn的示例。 有谁能够帮助我?

底层堆栈可以在忙于接受其他连接时拒绝连接(内部没有任何内容真正并行)。 如果你真的需要一次连接那么多客户端,你可以稍微改变一下客户端逻辑:重新连接失败(如评论中提出的那样)。 或者,您可以在不同端口上的不同线程上启动多个侦听器,并在客户端选择通过公平骰子连接的端口。

您可能希望研究使用SocketAsyncEventArgs对象。 然后你可以接受套接字来处理初始连接,一旦建立了连接,接受套接字就会把它交给一个worker SocketAsyncEventArgs对象。

查看此项目以开始使用它。 http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod

我发现使用这种技术非常有效,但是你会遇到操作系统和硬件的限制。 我测试了我的tcp服务器(在Windows服务器2008 R2上运行),它使用SocketAsyncEventArgs对象,有几千个连接,它成功运行,没有客户端被拒绝(不得不为此增加积压)。 问题在于,建立连接的客户端和服务器之间的时间以及客户端获得响应的时间随着同时连接请求数量的增加而增长。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM