using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Admin.NET.Core;
public static class SignalRDockExtensions
{
///
/// 注入redis底板
///
///
///
///
public static void AddSignalR_RedisDock(this IServiceCollection services, Func delegateRedisConnectionString)
{
var RedisConnectionString = delegateRedisConnectionString();
if (string.IsNullOrEmpty(RedisConnectionString))
{
throw new ArgumentNullException(nameof(RedisConnectionString));
}
services.AddSignalR(hubOptions =>
{
//SignalR 自己的 pinger ,客户端在定义的时间跨度内没有响应,它将触发OnDisconnectedAsync
hubOptions.KeepAliveInterval = TimeSpan.FromSeconds(5);
}).AddJsonProtocol()
.AddMessagePackProtocol()
// 支持MessagePack
.AddStackExchangeRedis(options =>
{
options.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false,
// Password = "changeme",
ChannelPrefix = "__signalr_",
};
//config.EndPoints.Add(IPAddress.Loopback, 0);
//config.SetDefaultPorts();
config.DefaultDatabase = 1;
var connection = await ConnectionMultiplexer.ConnectAsync(RedisConnectionString, writer);
connection.ConnectionFailed += (_, e) =>
{
ConsoleDebug.WriteLine("Connection to Redis failed.");
};
if (connection.IsConnected)
{
ConsoleDebug.WriteLine("connected to Redis.");
}
else
{
ConsoleDebug.WriteLine("Did not connect to Redis");
}
return connection;
};
});
}
}
//redis查看订阅列表 PUBSUB CHANNELS