我正在考虑编写一个需要能够在200个连接/秒的区域内处理的应用程序,并且想知道C#和.NET是否会处理这个问题,或者我是否需要真正关注C ++来执行此操作?
看起来SocketAsyncEventArgs可能是我要去的方式,但在我投入之前就考虑过id。
每笔交易的持续时间不应超过一秒,但每次交易最多可能需要15秒。
答案 0 :(得分:3)
如果您尝试维持该使用级别,则会遇到操作系统限制。你的短暂端口将很快到期。
如果您只需要处理大量连接的突发,那么.NET应该像C ++一样处理它;您可能需要将backlog
参数调整为Listen
。
答案 1 :(得分:1)
我写过这类事here。
只要您可以设计系统以避免在服务器上的TIME_WAIT
中累积套接字,从操作系统的角度来看,您应该可以在任何VISTA或更高版本上使用。您可以通过关闭延迟关闭服务器上的套接字来避免服务器上的TIME_WAIT
,以便TCP堆栈发送RST
而不是FIN
或者通过让客户端发出主动关闭,因此进入TIME_WAIT
而不是服务器。
你需要考虑接受的速度,所以使用异步接受调用并发布大量的调用,也会使监听backlog非常大。
如果您需要一些代码来测试您的服务器,我有一个“多客户端测试工具”,可以从here免费下载。它使用ConnectEx()
以可由命令行控制的速率同时发出可配置数量的异步连接。我更多地谈论它的使用here。
如果你正在考虑使用C ++而不是C#,那么我有一些可用的示例服务器here,以及一组基于免费I / O完成端口的代码here。
最重要的是,恕我直言,是为了确保你是testing for your desired level of scalability from Day 0。
祝你好运!