using StackExchange.Redis;
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) =>
{
Console.WriteLine("Connection to Redis failed.");
};
Console.WriteLine(connection.IsConnected ? "connected to Redis." : "Did not connect to Redis");
return connection;
};
});
}
}
//redis查看订阅列表 PUBSUB CHANNELS