我目前正在开发一个.NET c#套接字服务器,该服务器应该可以扩展到100K并发连接。我正在使用socketasynceventargs类和提到的here模式。如果我错了,请纠正我,但我明白保持100K并发连接不同于100K客户端在同一时间点击套接字服务器。我的问题是我可以同时连接多少个连接?这取决于socket backlog变量吗?如果是这样,我可以设置的最大积压值是多少?
提前致谢
答案 0 :(得分:2)
我目前正在开发一个.NET c#套接字服务器,它应该可以扩展到100K并发连接。
上次我在Win7上对此进行测试时,这是一个很容易实现的目标。连接数似乎受内存使用量的限制。
我正在使用socketasynceventargs类和此处提到的模式。
此模式用于具有非常高的呼叫频率。保持大量连接没有用,因为它使用的内存比简单的BeginRead
调用更多。始终询问为什么并且不要只复制示例代码。关于套接字的大多数示例代码都是非常错误的,即使在MSDN上也是如此。
每个套接字都有一个未完成的BeginRead调用。在读取调用完成之前,给定的内存缓冲区是固定的。这会导致GC问题。要么使用一个大的预分配缓冲区(64MB左右),要么首先只读取一个字节。只有当一个字节读取完成时,才能使用更大的缓冲区读取其余字节。
如果我错了,请纠正我但我明白维持100K并发连接不同于100K客户端在同一时间点击套接字服务器。
不确定我理解。在同一毫秒内进入的100k客户端将难以处理,同时保持在几秒钟内建立的100k连接更加容易。
我的问题是我可以同时连接多少个连接?
测试并期望找到一个很高的数字。观察你的RAM使用情况。
这取决于socket backlog变量吗?
这是针对尚未提交给应用程序的未完成连接。它在实践中大多没有意义,因为应用程序应该有一个快速接受循环,立即接受任何东西。
如果是的话,我可以设置的最大积压值是多少?
设置默认值。