2

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

由于我对套接字编程知之甚少,因此如果有人可以建议我一个开源项目来开始,那就太好了……我用谷歌搜索了它,但找不到任何好的解决方案。

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

[供您参考,我们计划在此服务器上使用 .Net 4.0]

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

提前致谢...

4

3 回答 3

5

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

然而:

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

另外,请记住,如果您使用异步发送,那么如果 TCP 流控制启动,这些可能需要很长时间才能完成,请参见此处

和...

其次,您应该从第 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

于 2011-01-11T08:41:04.993 回答
0

有人可能会说“可扩展”和“多线程”是相互矛盾的。在做出这样的决定之前,您需要探索设计空间。如果您需要可扩展性,可以只使用一个线程,但这取决于您提供的服务。

于 2011-01-11T04:05:23.927 回答
0

由于可扩展性是您的首要任务之一,而且我还将假设稳定性,我发现 Erlang 非常适合。它具有容错性和高度可扩展性。如果您有时间研究不同的选择,我建议您至少调查一下。

于 2011-01-11T04:29:46.147 回答