日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core SignalR Redis底板详解(一)

發布時間:2025/3/15 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core SignalR Redis底板详解(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其實微軟在.NET Framework時代就有Redis和Signalr的解決方案了。只不過我沒有花心思去找源碼。.NET Core版本的源碼倒是很全。我們在用signalR的時候。是會先創建一個ChatHub繼承Hub

public class ChatHub:Hub{public async Task SendMessage(string user,string message){await Clients.All.SendAsync("ReceiveMessage", user, message);}}

可以看到這里是調用了Clients.All.SendAsync方法。我們查看源碼,可以看到Hub是一個抽象類

public abstract class Hub : IDisposable{private bool _disposed;private IHubCallerClients _clients;private HubCallerContext _context;private IGroupManager _groups;/// <summary>/// Gets or sets an object that can be used to invoke methods on the clients connected to this hub./// </summary>public IHubCallerClients Clients{get{CheckDisposed();return _clients;}set{CheckDisposed();_clients = value;}} }

在Hub中的Clients繼承IHubCallerClients的。我們通過Crtl+F12查看實現找到HubCallerClients。所以不難看出上文中的Clients其實是HubCallerClients對象。在HubCallerClients中可以找到這段代碼

public IClientProxy All => _hubClients.All; 而這個_hubClients其實是HubClients。在HubClients的構造函數中我們可以看到 public HubClients(HubLifetimeManager<THub> lifetimeManager){_lifetimeManager = lifetimeManager;All = new AllClientProxy<THub>(_lifetimeManager);} HubLifetimeManager是一個抽象類。在這里我們用Redis做底板的時候。在這段代碼里就完成了 HubLifetimeManager的注冊 public static ISignalRServerBuilder AddStackExchangeRedis(this ISignalRServerBuilder signalrBuilder, Action<RedisOptions> configure){signalrBuilder.Services.Configure(configure);signalrBuilder.Services.AddSingleton(typeof(HubLifetimeManager<>), typeof(RedisHubLifetimeManager<>));return signalrBuilder;}

而這個AllClientProxy對象其實很干凈。只有一個方法

internal class AllClientProxy<THub> : IClientProxy where THub : Hub{private readonly HubLifetimeManager<THub> _lifetimeManager;public AllClientProxy(HubLifetimeManager<THub> lifetimeManager){_lifetimeManager = lifetimeManager;}public Task SendCoreAsync(string method, object[] args, CancellationToken cancellationToken = default){return _lifetimeManager.SendAllAsync(method, args);}}

所以上面的Clients.All其實是AllClientProxy對象。至于SendAsync其實是一個擴展方法

public static Task SendAsync(this IClientProxy clientProxy, string method, object arg1, object arg2, CancellationToken cancellationToken = default){return clientProxy.SendCoreAsync(method, new[] { arg1, arg2 }, cancellationToken);}

可以看到,此時Clients.All.SendAsync實際上是調用AllClientProxy的SendCoreAsync方法

轉載于:https://www.cnblogs.com/dbdn/p/11389737.html

總結

以上是生活随笔為你收集整理的.NET Core SignalR Redis底板详解(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一区二不卡视频 | 国产aaaaaa| 久久这里有精品 | av第一页| 夜夜躁狠狠躁日日躁av | 精品一区二区三区人妻 | 一级黄色录像免费观看 | 久久久久久国产精品免费 | 亚洲在线视频免费观看 | 国产特黄大片aaaa毛片 | 超碰资源 | 欧美韩国一区 | 日本一区免费电影 | 日韩欧美大陆 | 女女av在线 | 一区二区三区在线免费观看视频 | 日韩精品一区二区三区四区五区 | 欧美日韩亚洲系列 | 亚洲熟妇一区 | 精品在线不卡 | jizz成人 | 成人免费影片 | 成人观看视频 | 调教女m荡骚贱淫故事 | 久操综合| 欧美日韩在线视频观看 | 成人特级毛片69免费观看 | 欧美私人网站 | av在线免费观看网址 | 日本a级大片 | 天堂资源 | 亚洲永久无码7777kkk | 啪啪中文字幕 | 曰批又黄又爽免费视频 | 久久人人插 | 久久精品国产精品亚洲色婷婷 | 日韩欧美一级二级 | 国产97视频 | 国产骚b | 51久久久 | 无码日韩人妻精品久久蜜桃 | 久久男人视频 | 成人黄色免费网站 | 成人精品免费网站 | 欧美妞干网 | 午夜av成人| 在线观看一区二区三区四区 | 成人做受黄大片 | 亚洲综合不卡 | 亚洲天堂视频网站 | 国产无| 欧美激情一二三 | 一级黄色片在线免费观看 | 风流少妇一区二区三区91 | 成人免费黄色大片 | 黑人巨大精品欧美一区二区 | 欧美精品亚洲 | 波多野结衣一区二区三区在线观看 | 中文在线观看免费视频 | 欧美在线免费视频 | 青青青视频免费 | 国产视频观看 | 尤物精品| 国产污视频 | 人妻丰满熟妇无码区免费 | 岛国片在线免费观看 | 久久精品视频一区二区 | 日本aⅴ在线观看 | 亚洲福利视频网站 | 狠狠躁日日躁夜夜躁av | 国产一区二区精品在线观看 | 亚洲美免无码中文字幕在线 | 农村老熟妇乱子伦视频 | 中文在线字幕免费观看 | 全黄性性激高免费视频 | 国产视频二区 | 国产精品熟女久久久久久 | 五月婷婷激情网 | av网站在线观看不卡 | 波多野结衣在线免费观看视频 | 青青99 | 亚洲男同视频 | 亚洲乱码国产乱码精品天美传媒 | 中文字幕二区在线观看 | 天天av综合 | 99久久久无码国产精品免费蜜柚 | 中文字幕在线观看你懂的 | 香蕉av777xxx色综合一区 | 一区二区三区在线免费播放 | 午夜大片在线观看 | 美腿丝袜av | 国产一区二区在线观看免费 | 美女黄18以下禁止观看 | 国产精品videossex久久发布 | 欧美最猛黑人xxxx黑人猛交 | 欧美一区二区三区成人 | 国产三级三级在线观看 | 中文在线字幕免费观看 | 成av在线 |