gpt4 book ai didi

c# - SignalR 与 Azure 进行横向扩展以实现聊天场景

转载 作者:行者123 更新时间:2023-11-30 16:52:25 24 4
gpt4 key购买 nike

对于聊天应用程序,我将 Azure 架构与 SignalR 结合使用,Web 角色充当 SignalR 服务器(消息不是广播类型,而是针对特定用户/客户端)。

我想扩展 SignalR 服务器以及 Web 角色,以处理繁重的用户负载。尽管如此,当消息数量随着更多用户连接而增加(或在用户事件驱动的场景中)时,SignalR 文档不建议使用使用背板(Redis、服务总线)的预烘焙 SignalR 横向扩展方法。它明确指出:“客户端到客户端(例如聊天):在这种情况下,如果消息数量随着客户端数量的增加而增加,即如果消息速率增长,则背板可能会成为瓶颈随着更多客户加入,比例会成比例。”

问题:有谁知道针对这种高频情况的任何自定义横向扩展解决方案,该解决方案不会将消息推送到每个服务器实例或其他横向扩展解决方案?

已经在 SignalR 文档和相关视频中到处查找,但除了“filtered-bus”一词之外找不到任何内容,该词没有解释它是什么以及应该如何使用。

最佳答案

我自己弄清楚了:基本思想是服务器亲和性/粘性 session 。

Web 角色的每个实例都充当独立的 SignalR 服务器。在第一次连接时,我让 Azure 负载均衡器选择任意 Web 角色实例,并将该 Web 角色实例的 IP 地址与客户端标识符一起保存在映射中。如果有来自同一客户端的另一个连接请求(例如,页面刷新后),则我检查当前角色实例的 IP 地址,如果它与映射中的条目匹配,则让它继续,否则我断开客户端并将其连接到网络角色的正确实例。

worker-role 的每个实例还充当 SignalR .net 客户端,并连接到所有可用的 SignalR 服务器(Web-role 的所有实例)。在向 SignalR 服务器(网络角色)发送消息之前,我在 map 中查找以确定正确的 SignalR 服务器实例(取决于预期的 JS 接收者)。

好处:

  • 不需要背板技术(因此消息传递不会延迟)。

  • 每个 Web 角色实例都关心连接到它的客户端,并且每个消息不必在每个 SignalR 服务器上重复。因此它可以很好地扩展。

  • 易于实现。

关于c# - SignalR 与 Azure 进行横向扩展以实现聊天场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604554/

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