问题背景:当SignalR应用部署在一台服务器的时候,随着用户量的增加,服务器的承载能力肯定会达到瓶颈,这时候就需要考虑多部署几台服务器来缓解压力
解决办法:多台服务器部署SignalR应用,一台服务器部署Redis服务
如上图,一台SignalR服务器对应一个用户群,SignalR应用服务器和Redis服务器之间采用发布-订阅模式。当用户群1的用户向用户群2的用户发送消息的时候,消息先到达SignalR应用服务器1,SignalR1服务器向Redis服务器发布消息,其他服务器订阅了Redis服务器的消息,会接受到SignalR服务器1的消息,SignalR服务器2发现是自己用户消息,因此接受消息并将消息发送给用户群2里面的用户
实现:
在vs2017新建一个web应用,在nuget上安装Microsoft.AspNetCore.SignalR.Redis 和Microsoft.AspNetCore.SignalR.StackExchangeRedis两个应用组件
在Start.cs代码文件里面新增SignalR服务并配置Redis服务
services.AddSignalR()
.AddRedis("127.0.0.1:6379", opitons =>
{
opitons.Configuration.ChannelPrefix = "myapp2"; //同一个Signa