ASP.NET Core SignalR的分布式部署

假设聊天室程序被部署在两台服务器上,客户端1、2连接到了服务器A上的ChatRoomHub,客户端3、4连接到服务器B上的ChatRoomHub,那么客户端1发送群聊消息时,只有客户端1、2能够收到,客户端3、4收不到;在客户端3发送群聊消息,只有客户端3、4能够收到,客户端1、2收不到。因为这两台服务器之间的ChatRoomHub没有通信。可以让多台服务器上的集线器连接到一个消息队列中,通过这个消息队列完成跨服务器的消息投递。

微软官方提供了用Redis服务器来解决SignalR部署在分布式环境中数据同步的方案Redis backplane,其使用方法如下

NuGet:Microsoft.AspNetCore.SignalR.StackExchangeRedis

cs 复制代码
builder.Services.AddSignalR().AddStackExchangeRedis("127.0.0.1", opt =>
{
    opt.Configuration.ChannelPrefix = "SignalR_MyHub_";
});

AddStackExchangeRedis第一个参数为Redis服务器的连接字符串,如果有多个SignalR应用程序连接同一台Redis服务器,需要为每个应用程序配置唯一的ChannelPrefix

相关推荐
洛神灬殇1 小时前
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 时间事件处理部分)
redis·后端
遥夜人间2 小时前
Redis之缓存穿透
redis·缓存
西门吹雪@1323 小时前
redis 配置日志和数据存储位置
数据库·redis·缓存
qw9495 小时前
Redis面试——事务
redis
s_little_monster5 小时前
【Linux】线程互斥之线程加锁
linux·运维·经验分享·redis·笔记·学习·学习方法
遥夜人间6 小时前
Redis之缓存更新策略
redis·缓存
小安同学iter7 小时前
Redis入门(Java中操作Redis)
数据库·redis·缓存
SimonKing8 小时前
京东外卖,探索「距离最近」排序背后的秘密
redis·后端·mysql
小小坦克手9 小时前
实验不能停:docker 部署支持用户名的redis容器
运维·数据库·redis
一代...11 小时前
【Redis】Redis基本命令(1)
数据库·redis·缓存