在.Net中设计“可扩展的多线程套接字推送服务器”

时间:2011-01-11 03:44:13

标签: c# .net sockets network-programming serversocket

我们正在开始设计.Net中的可扩展多线程套接字推送服务器,它最初将为每个节点处理10K个客户端。由于设计这可能非常复杂,如果所有专家都可以提供任何指导,资源,最佳实践等,那将对我有所帮助。

由于我对套接字编程知之甚少,如果有人可以建议我开始使用一个开源项目,那真的很好......我用Google搜索,但找不到任何好的解决方案。

这对于想要设计此类服务器的其他人也很有帮助。

[为了您的信息,我们计划将.Net 4.0用于此服务器]

我一直在阅读有关Async Socket及其Pinning related problem的大量信息。这个问题在.Net 4.0中是否仍然存在?

先谢谢...

3 个答案:

答案 0 :(得分:5)

在合理的硬件上使用.Net的10k并发连接不应该是一个大问题,但是,一如既往,它将取决于您在服务器中实际执行的操作以及每个连接彼此之间的隔离程度。毕竟,当你没有为每个节点定义硬件要求时,说“每个节点处理10k个客户端”是没有意义的,每个连接上流入和流出的数据量以及每个连接可能有多少CPU。需要做好自己的工作。我在这里谈论这些含糊不清的手动扩展性问题:http://www.serverframework.com/asynchronousevents/2010/12/one-million-tcp-connections.html

但是:

首先,您应该查看异步套接字API,并且几乎忽略了线程问题。 .Net的异步套接字将为您处理线程并使用I / O完成端口(一个非常可扩展的内核对象)来管理您的线程。

另外,请记住,如果您使用的是异步发送,那么如果TCP流量控制启动,则可能需要很长时间才能完成,请参阅here

和...

其次,你应该从第0天开始测试你的可扩展性,并在开发过程中一直测试它 - 我在这里写下原因:http://www.serverframework.com/asynchronousevents/2010/10/how-to-support-10000-or-more-concurrent-tcp-connections---part-2---perf-tests-from-day-0.html

答案 1 :(得分:0)

有些人可能会说'可扩展'和'多线程'是相互矛盾的。你需要在做出决定之前探索设计空间。如果你需要可扩展性,可能只使用一个线程,但这取决于你正在提供什么。

答案 2 :(得分:0)

可扩展性是您的首要任务之一,我也将保持稳定性,我发现Erlang非常适合。它具有容错能力和高度可扩展性。如果你有时间研究不同的选项,我建议至少要研究一下。