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

相关推荐
三水不滴2 小时前
Redis 故障转移:哨兵vs集群
数据库·经验分享·redis·缓存·性能优化
TracyCoder1232 小时前
Redis 大 Key问题解析与治理
redis
虫小宝2 小时前
查券返利机器人的异步任务调度:Java XXL-Job+Redis实现海量查券请求的分布式任务分发
java·redis·分布式
huohuopro4 小时前
Redis安装和杂谈
数据库·redis·缓存
fengxin_rou4 小时前
从 String 到 Zset:Redis 核心数据结构全解析及排行榜应用
java·开发语言·redis·多线程
惊讶的猫4 小时前
redis数据淘汰策略
redis·缓存
睡美人的小仙女12713 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
徐同保14 小时前
解决 Vue 3 项目 TypeScript 编译错误:@types/lodash 类型定义不兼容
redis·网络协议·https
he___H16 小时前
Redis高级数据类型
数据库·redis·缓存
笨手笨脚の16 小时前
Redis: Thread limit exceeded replacing blocked worker
java·redis·forkjoin·thread limit