.NET Socketserver最大并发连接数和待办事项的最大值

时间:2014-07-10 10:01:24

标签: c# multithreading sockets scalability

我目前正在开发一个.NET c#套接字服务器,该服务器应该可以扩展到100K并发连接。我正在使用socketasynceventargs类和提到的here模式。如果我错了,请纠正我,但我明白保持100K并发连接不同于100K客户端在同一时间点击套接字服务器。我的问题是我可以同时连接多少个连接?这取决于socket backlog变量吗?如果是这样,我可以设置的最大积压值是多少?

提前致谢

1 个答案:

答案 0 :(得分:2)

  

我目前正在开发一个.NET c#套接字服务器,它应该可以扩展到100K并发连接。

上次我在Win7上对此进行测试时,这是一个很容易实现的目标。连接数似乎受内存使用量的限制。

  

我正在使用socketasynceventargs类和此处提到的模式。

此模式用于具有非常高的呼叫频率。保持大量连接没有用,因为它使用的内存比简单的BeginRead调用更多。始终询问为什么并且不要只复制示例代码。关于套接字的大多数示例代码都是非常错误的,即使在MSDN上也是如此。

每个套接字都有一个未完成的BeginRead调用。在读取调用完成之前,给定的内存缓冲区是固定的。这会导致GC问题。要么使用一个大的预分配缓冲区(64MB左右),要么首先只读取一个字节。只有当一个字节读取完成时,才能使用更大的缓冲区读取其余字节。

  

如果我错了,请纠正我但我明白维持100K并发连接不同于100K客户端在同一时间点击套接字服务器。

不确定我理解。在同一毫秒内进入的100k客户端将难以处理,同时保持在几秒钟内建立的100k连接更加容易。

  

我的问题是我可以同时连接多少个连接?

测试并期望找到一个很高的数字。观察你的RAM使用情况。

  

这取决于socket backlog变量吗?

这是针对尚未提交给应用程序的未完成连接。它在实践中大多没有意义,因为应用程序应该有一个快速接受循环,立即接受任何东西。

  

如果是的话,我可以设置的最大积压值是多少?

设置默认值。