【问题标题】:Designing "Scalable Multi Threaded Socket Push Server" in .Net在.Net中设计“可扩展的多线程套接字推送服务器”
【发布时间】:2011-01-11 03:44:13
【问题描述】:

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

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

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

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

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

在此先感谢...

【问题讨论】:

  • 不要采取这种错误的方式,但鉴于您几乎没有套接字编程经验,因此设计“.Net 中的可伸缩多线程套接字推送服务器,该服务器最初将处理每个节点 10K 客户端”是否合适?
  • 我几乎没有socket经验,但我相信我是一个非常优秀的开发者。而且在开始这个项目之前我有一些时间研究这个主题,所以这很公平....
  • 我也相信会有很多像我这样的人得到这个查询。这个问题的答案将帮助他们所有人......

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 正如其他答案中所建议的,我将使用异步套接字连接,因此 .Net 将处理线程问题...
    【解决方案3】:

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

    【讨论】:

    • 事件虽然我对 Erlang 没有任何了解,但我肯定也会考虑这个选项。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多