gpt4 book ai didi

c# - StackExchange NetGain 与 Node.js WS websocket 服务器性能

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:50 25 4
gpt4 key购买 nike

我主要是一名 C#/.NET 开发人员,需要编写一个相对简单但高性能且稳定的 websocket 服务器。目前,微软的 websocket 相关工作的唯一官方平台似乎是 SignalR。但是,对于我的需要,它增加了太多的开销。

另一个看起来很有吸引力的选项是 StackExchange 的 NetGain 库,但是,除了 github 页面之外似乎没有太多信息。在 stackoverflow 上什至没有与该库相关的问题/答案。我确实在 stackexchange 上找到了某人的推特帖子,其中显示 NetGain 为 500K 并发 session 提供服务,但这些 session 分布在多台机器上。相比之下,Node.js 上的 WS 模块可以在单个服务器上处理 550K。

Node.js 上的 WS 模块是否比 NetGain 更高效?对于简单的基于 NetGain 的 websocket 服务器,我可以在一台基于四核的机器上拥有多少个并发连接?我真的很想使用 NetGain 并继续使用 C#,因为我仍在学习 Node.js,但是,如果性能差异很大,我宁愿使用 Node。

最佳答案

不幸的是,在性能方面更好的毯子不是正确的问题。

Ably ,我们以很少的开销处理数百万个 websocket 连接,因为保持连接打开需要很少的工作。当我们设计终止并保持打开的 WebSocket 连接的前端服务器时,我们考虑了一些事情:

  • WS 连接是否需要心跳,如果需要,频率是多少?我们是仅仅依靠 TCP/IP 来检测连接断开,还是通过心跳来提高突然断开检测的可靠性?我们需要后者,以便我们能够提供更准确的 presence / device awareness ,所以这增加了很多开销。例如,如果我们在单个盒子上有 100k 个连接并且每 10 秒发送一次心跳,即每秒发送和接收 10k 个心跳,那么每秒 20k 帧数据。
  • 每个连接的预期工作速率是多少。我们假设连接使用情况会有很大差异,但您确实需要粗略估计每个连接的预期工作量。我们假设每个连接广播平均每秒 1 条消息,每分钟接收 10 条消息。因此,如果您再次假设有 10 万个连接,那就是每秒广播 10 万条消息加上收到的 16 千条消息加上发送的大约 1 万 6 千条 ACK。
  • 连接断开和重新连接的频率以及每次新连接进入时需要多少工作量。例如,如果您有 10 万个连接并预计每个连接每 10 分钟重新连接一次,则每秒有 166 个新连接。每个新连接都需要握手、身份验证、HTTP 升级,因此我们假设这相当于总共大约 20 次操作来建立连接或每秒 3,320 次。
  • 是你的终止 TLS,如果是,all bets are off .因此,假设以上所有内容都用于 100k 连接,我们可以预期大约 20k 心跳操作 + 100k 消息广播 + 32k 消息接收,包括。 ACK + 3.3k 连接终止 = 每秒 155k 次操作。

但这并没有考虑高峰和低谷,预计您的持续高峰(比如 1 分钟内)超过平均值 3-4 倍并非不现实,因此大约每秒 60 万次操作。

结论

谈论一个 WS 库可以打开多少个连接并不那么重要。处理消息、处理身份验证、处理故障以及与其他系统通信可能会耗尽您的所有资源,因此如果您想估计一个强大的盒子可以做什么,请从那里开始。

Matt,联合创始人,Ably - simply better realtime

关于c# - StackExchange NetGain 与 Node.js WS websocket 服务器性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com