C# .NET Socketserver最大并发连接数和积压工作的最大值

C# .NET Socketserver最大并发连接数和积压工作的最大值,c#,multithreading,sockets,scalability,C#,Multithreading,Sockets,Scalability,我目前正在开发一个.NETC#套接字服务器,它应该能够扩展到100K个并发连接。我使用的是socketasynceventargs类和上面提到的模式。如果我错了,请纠正我的错误,但我理解维护100K并发连接与100K客户端同时命中套接字服务器是不同的。我的问题是我可以同时建立多少个连接?这是否取决于套接字backlog变量?如果是这样,我可以设置的最大积压值是多少 提前谢谢 我目前正在开发一个.NETC#套接字服务器,它应该能够扩展到100K个并发连接 上次我在Win7上测试它时,这是一个很容易

我目前正在开发一个.NETC#套接字服务器,它应该能够扩展到100K个并发连接。我使用的是socketasynceventargs类和上面提到的模式。如果我错了,请纠正我的错误,但我理解维护100K并发连接与100K客户端同时命中套接字服务器是不同的。我的问题是我可以同时建立多少个连接?这是否取决于套接字backlog变量?如果是这样,我可以设置的最大积压值是多少

提前谢谢

我目前正在开发一个.NETC#套接字服务器,它应该能够扩展到100K个并发连接

上次我在Win7上测试它时,这是一个很容易达到的目标。连接的数量似乎受到内存使用的限制

我使用的是socketasynceventargs类和这里提到的模式

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

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

如果我错了,请纠正我的错误,但我理解维护100K并发连接与100K客户端同时命中套接字服务器是不同的

我不太明白。在同一毫秒内进入的100k客户端将很难处理,而保持在几秒钟内建立的100k连接则容易得多

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

测试一下,期望找到一个高的数字。注意RAM的使用

这是否取决于套接字backlog变量

这适用于尚未提交给应用程序的未完成连接。这在实践中几乎毫无意义,因为应用程序应该有一个快速的接受循环,可以立即接受任何东西

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


设置默认值。

100K连接在同一台机器上?使用哪种吞吐量?是的,在开始扩展之前,我想检查单个服务器可以处理多少吞吐量。我的senario是100K客户端可以连接并发送大约200-300字节大小的消息。服务器响应并发送一条ack消息,客户端发送另一条消息(此循环重复10次)。10次只是一次测试。在实时情况下,它可以是每秒1或50 etc1或50 etc1,对吗?这个想法是客户端应该一个接一个地发送它的所有消息,因为它在发送下一条消息后从服务器获得确认,并在发送所有消息后关闭连接。感谢您的详细响应。