SignalRDockExtensions.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using StackExchange.Redis;
  2. namespace Admin.NET.Core;
  3. public static class SignalRDockExtensions
  4. {
  5. /// <summary>
  6. /// 注入redis底板
  7. /// </summary>
  8. /// <param name="services"></param>
  9. /// <param name="delegateRedisConnectionString"></param>
  10. /// <exception cref="ArgumentNullException"></exception>
  11. public static void AddSignalR_RedisDock(this IServiceCollection services, Func<string> delegateRedisConnectionString)
  12. {
  13. var redisConnectionString = delegateRedisConnectionString();
  14. if (string.IsNullOrEmpty(redisConnectionString))
  15. throw new ArgumentNullException(nameof(redisConnectionString));
  16. services.AddSignalR(hubOptions =>
  17. {
  18. // SignalR 自己的 pinger ,客户端在定义的时间跨度内没有响应,它将触发OnDisconnectedAsync
  19. hubOptions.KeepAliveInterval = TimeSpan.FromSeconds(5);
  20. })
  21. .AddJsonProtocol()
  22. .AddMessagePackProtocol()
  23. // 支持MessagePack
  24. .AddStackExchangeRedis(options =>
  25. {
  26. options.ConnectionFactory = async writer =>
  27. {
  28. var config = new ConfigurationOptions
  29. {
  30. AbortOnConnectFail = false,
  31. // Password = "changeme",
  32. ChannelPrefix = "__signalr_",
  33. };
  34. // config.EndPoints.Add(IPAddress.Loopback, 0);
  35. // config.SetDefaultPorts();
  36. config.DefaultDatabase = 1;
  37. var connection = await ConnectionMultiplexer.ConnectAsync(redisConnectionString, writer);
  38. connection.ConnectionFailed += (_, e) =>
  39. {
  40. Console.WriteLine("Connection to Redis failed.");
  41. };
  42. Console.WriteLine(connection.IsConnected ? "connected to Redis." : "Did not connect to Redis");
  43. return connection;
  44. };
  45. });
  46. }
  47. }
  48. //redis查看订阅列表 PUBSUB CHANNELS