我目前正在开发一个.NET C#套接字服务器,应该能够扩展到100K并发连接。 我正在使用socketasynceventargs类和此处提到的模式。请纠正我,如果我错了,我理解维护100K并发连接与100K客户端同时命中套接字服务器是不同的。我的问题是我可以同时建立多少个连接?这是否取决于套接字后备变量?如果是这样,最大后备值是多少?感谢您的帮助。
我目前正在开发一个能够扩展到100K并发连接的.NET c# socket服务器。上次在Win7上测试,这是一个容易实现的目标。连接数量似乎受内存使用限制。我正在使用SocketAsyncEventArgs类和此处提到的模式。此模式用于拥有非常高频率的调用。保持大量连接并不实用,因为它比简单的outstanding BeginRead调用使用更多的内存。始终要问“为什么”,而不只是复制示例代码。即使在MSDN上,大部分关于sockets的示例代码都是错误的。每个socket保持一个单独的BeginRead调用outstanding。直到读取调用完成,给定的内存缓冲区将被固定。这会导致GC问题。可以使用一个预先分配的大缓冲区(大约64MB)或者一开始只读取一个字节。当该读取完成后,再使用一个更大的缓冲区读取其余内容。请纠正我,如果我理解成维护100K并发连接与同时有100K客户端命中socket服务器是不同的。我不确定我理解了。在同一毫秒内进入的100k个客户端处理起来很困难,而在数秒钟内建立的100k个连接则容易得多。我的问题是我可以同时建立多少连接?进行测试并期望找到一个高数字。观察你的RAM使用率。这是否取决于socket backlog变量?这是未被交给应用程序的outstanding连接。在实践中,它大多数时候是没有意义的,因为一个应用程序应该有一个快速的接受循环立即接受任何东西。如果是这样,我可以设置最大的backlog值是多少?设置默认值即可。