【SignalR全套系列】之在.Net6中實SignalR通信

微信公眾號:趣編程ACE
關注可了解更多的.NET日常實戰開發技巧,如需源碼 請公眾號后臺留言 源碼
[如果覺得本公眾號對您有幫助,歡迎關注]

前文回顧

【SignalR全套系列】之在.NetCore中實現WebSocket雙工通信

【SignalR全套系列】之在.Net Core 中實現Server-Send Events消息推送

【SignalR全套系列】之在.Net Core 中實現長輪詢

SignalR 的基本使用

簡介

1.SignalR是一個微軟開源的庫,作用于客戶端與服務端之間的相互通信。
2.前文簡述的WebSocket、SSE、長輪詢等三種方式,SignalR都支持,此外還能自動選擇最佳的通信方式。
3.至于用途,主要是用在實時性要求較高的場景,比如:聊天、看板、發布公告等

服務端實現

新建.net6項目

7e9ce9e3f74b0683a7e90418e1042f2b.png

1.注入SignalR所需服務
1//?注入SignalR所需服務
2builder.Services.AddSignalR();
2.注入SignalR所需服務
1//?開啟靜態文件??將客戶端代碼寫入wwwroot中??防止跨域
2app.UseStaticFiles();
3.開啟SignalR的路由節點
1//?開啟路由節點?用來映射Signalr請求路徑??
2//?/custom?為自定義路徑??
3//?CustomHub?為Hub?類型
4app.MapHub<CustomHub>("/custom");
5//?同時支持分組請求,下篇講解,,,,
3.自定義一個Hub類型 繼承Hub
1//?CustomHub:Hub?繼承?Hub
2public?class?CustomHub:Hub<ClientData>{}
4.重寫Hub 中 連接和關閉連接方法
1????????///?<summary>2????????///?重寫鏈接鉤子3????????///?</summary>4????????///?<returns></returns>5????????public?override?Task?OnConnectedAsync()6????????{7????????????return?base.OnConnectedAsync();8????????}9
10????????public?override?Task?OnDisconnectedAsync(Exception??exception)
11????????{
12????????????return?base.OnDisconnectedAsync(exception);
13????????}
5.構造函數中引入日志中間件
1//?引入日志?方便控制臺輸出
2private?readonly?ILogger<CustomHub>?_logger;
3
4public?CustomHub(ILogger<CustomHub>?logger)
5{
6???this._logger?=?logger;
7}
6.編寫與客戶端通信方法
1????????///?<summary>2????????///?建立通信3????????///?</summary>4????????///?<param?name="data"></param>5????????public?void?BeginSendData(TransData?data)6????????{7????????????_logger.LogInformation("接受數據{0},{1}",data.id,data.message);8????????}9
10????????///?<summary>
11????????///?單一客戶端調用?通信
12????????///?僅僅通知?調用的那個客戶端?其余建立鏈接的客戶端不生成通信
13????????///?</summary>
14????????///?<returns></returns>
15????????public?Task?SingleClientCaller()
16????????{
17????????????_logger.LogInformation("單獨客戶端調用");
18????????????return?Clients.Caller.ClientHook(new?(111,"111?客戶端調用"));
19????????}
20
21????????///?<summary>
22????????///?所有客戶端建立通信
23????????///?可通知所有的客戶端
24????????///?</summary>
25????????///?<returns></returns>
26????????public?Task?AllClientResponse()
27????????{
28????????????_logger.LogInformation("通知所有的客戶端");
29
30????????????return?Clients.All.ClientHook(new(Guid.NewGuid(),"通知所有的客戶端"));
31????????}
32
33????????///?<summary>
34????????///?指定調用??
35????????///?</summary>
36????????///?<returns></returns>
37????????[HubMethodName("invoke")]
38????????public?TransData?IvoData()
39????????{
40????????????return?new?TransData(666,"返回invoke?data");
41????????}

客戶端實現

1.引用js庫

41b75fcfd5fc7f659a62a6541b8a6392.png

2.編寫調用腳本
1//?初始化?路由:/custom 被路由節點捕獲
2let?connection?=?new?signalR.HubConnectionBuilder()
3????????.withUrl("/custom")
4????????.build();
1//?開始連接?調用后臺?BeginSendData?方法?成功后雙方交互數據
2????????connection.start().then(()?=>?{
3????????console.log("開始鏈接")
4????????let?id?=?parseInt(Math.random()*100);
5????????connection.send('BeginSendData',?{id:?id,?message:?"鏈接成功了"})
6????});
1????//?調用?SingleClientCaller?這個方法2????const?selfCall?=?()?=>?connection.send('SingleClientCaller')34????//?調用AllClientResponse這個方法5????const?all?=?()?=>?connection.send('AllClientResponse')67????//?觸發后臺控制器8????const?triggerFetch?=?()?=>?fetch('/SendData')9
10????//?call?signalR?hub?function?from?client
11????const?withReturn?=?()?=>?connection.invoke('invoke')
12????????.then(data?=>?console.log('ivo?data',?data))
1?//?后臺默認觸發
2????connection.on("ClientHook",?data?=>?console.log('客戶端觸發成功',?data));
3
4????//?后臺指定方法觸發之后
5????connection.on("client_recive",?data?=>?console.log('后臺觸發成功',?data));

以上便是SignalR實現客戶端與服務端通信的基本方法,下篇文章將演示分組通信

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286286.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286286.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286286.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實踐1-qq郵箱主頁

純html的網頁 采用table分割板塊進行布局<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

解決adb調試顯示 Connected Device ************** [null]

或者有時候直接提示[UNAUTHORIZED……] 上邊的提示 Connected Device 中設備編號 后邊加了個[null]&#xff0c;意思是未授權&#xff0c;看下設備是否提示授權&#xff0c;如果沒看到提示&#xff0c;可以重新拔掉設備&#xff0c;重新連接接數據線&#xff0c;會彈出一個授權…

C語言試題二十三之編寫一個函數void function(int tt[m][n],int pp[n]),tt指向一個m行n列的二維函數組,求出二維函數組每列中最小元素,并依次放入pp所指定一維數組中

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

Java 解析XML的幾種方法

XML現在已經成為一種通用的數據交換格式,它的平臺無關性,語言無關性,系統無關性,給數據集成與交互帶來了極大的方便。 XML在不同的語言里解析方式都是一樣的,只不過實現的語法不同而已。 基本的解析方式有兩種,一種叫SAX&#xff0c;另一種叫DOM。 SAX是基于事件流的解析,DOM是…

怎么發表博客,還不能顯示在自己的博客首頁上,這還不如玩單機!

怎么發表博客&#xff0c;還不能顯示在自己的博客首頁上&#xff0c;這還不如玩單機&#xff01; 怎么發表博客&#xff0c;還不能顯示在自己的博客首頁上&#xff0c;這還不如玩單機&#xff01; 怎么發表博客&#xff0c;還不能顯示在自己的博客首頁上&#xff0c;這還不如玩…

【前端就業課 第二階段】CSS 零基礎到實戰(03)前端 CSS 動效 transition transform

本系列文章持續更新&#xff0c;點擊專欄就可以看其他文章&#xff1a;點擊進入專欄 整個前端學習路線 以下路線為 CSDN C認提供&#xff1a; 如果想 快點搞完 并且 就業 可以選擇超級實習生計劃 如果有技術想穩定點找工作&#xff0c;可以C認證&#xff0c;C認證還可以 內…

【專升本計算機】專升本計算機期末考試復習題(B卷附答案)

文章目錄 一、單選題(每空2分,共20分)。二、填空題(每空2分,共30分)。三、程序題(每小題10分,共50分)一、單選題(每空2分,共20分)。 世界上第一臺電子計算機誕生于( B )年。 A.1956?? B.1946?? C.1944?? D.1940以下不屬于數字計算機特點的是 C__ 。 A.運算…

C#基于.Net-HtmlAgilityPack庫的爬蟲初體驗

講故事前幾天有點空閑時間&#xff0c;在github上看一些.Net的開源庫&#xff0c;看到了關于爬蟲相關的庫&#xff0c;于是加入了一個QQ群&#xff0c;看到里面各位大佬討論的是爬的越好&#xff0c;進去越快&#xff0c;于是我自己也想做一個爬蟲相關的東西&#xff0c;但是爬…

C語言試題二十四之編寫一個函數unsigned function(unsigned w),w使一個大于10的無符號整數,若w是n(n≥2)位的整數,則函數求出w后n-1位的數作為函數值返回。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

Github上影響力最大的十位Pythoner

http://mp.weixin.qq.com/s?__bizMzAxMjUyNDQ5OA&mid2653551864&idx1&sn493bbba119d6888c7ee5bdcc1a1aaba4&scene1&srcid09115MPDroKR2mgxBaOOIzSb#rd 轉載于:https://www.cnblogs.com/ITniu/p/5862322.html

Android中文圖混排時文圖的居中對齊 FontMetrics以及自定義ImageSpan實現

文章轉自&#xff1a;http://www.sohu.com/a/150059234_611601 本文作者CnPeng的博客地址&#xff1a; http://www.jianshu.com/p/2650357f7547 這個標題有點長&#xff0c;乍一看這么個標題你可能沒明白啥意思&#xff0c;且聽我慢慢道來。 公司的項目中新增了一個“心動”…

關于事件監聽機制的總結(Listener和Adapter)

記得以前看過事件監聽機制背后也是有一種設計模式的.(設計模式的名字記不清了,只記得背后實現的數據結構是數組.) 附上事件監聽機制的分析圖: 一個事件源可以承載多個事件(只要這個事件源支持這個事件就可以,男人就不支持生孩子的事件) 事件和監聽器有對應關系的. 下面用awt中…

【專升本計算機】專升本計算機期末考試復習題(C卷附答案)

文章目錄 一、單選題(每空2分,共20分)。二、填空題(每空2分,共30分)。三、程序題(每小題10分,共50分)一、單選題(每空2分,共20分)。 世界上第一臺電子計算機誕生于( B )年。 A.1956?? B.1946?? C.1944?? D.1940關閉正在運行的程序窗口,可以按( D )。 A.…

C語言試題二十五之編寫一個函數float function(double h),函數的功能使對變量h中的值保留2位小數,并對第三位進行四舍五入(規定h中的值位正數)。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫一個函…

一、首頁、詳情頁、文章編輯頁制作《iVX低代碼/無代碼個人博客制作》

注&#xff1a;iVX也有免費直播課《第八期直播課》 一、首頁制作 首頁預覽如下&#xff1a; 首先在博客頁創建一個相對應項目&#xff1a; 接著選擇前臺&#xff0c;創建一個頁面&#xff0c;命名為首頁&#xff1a; 接著更改當前屏幕為小屏尺寸&#xff1a; 接著我們分…

HDU 4085 Steiner樹模板稱號

Dig The Wells Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 971 Accepted Submission(s): 416Problem DescriptionYou may all know the famous story “Three monks”. Recently they find some places ar…

Saga體系結構模式:微服務架構下跨服務事務的實現

在服務端應用程序中&#xff0c;我們往往會通過事務處理來保證數據一致性&#xff08;Data Consistency&#xff09;&#xff0c;例如&#xff1a;當用戶從庫存中取走了一定數量的物品&#xff0c;這些物品會體現在用戶的提貨單上&#xff0c;與此同時&#xff0c;庫存中物品的…

Css樣式基礎

1.Css的語法 CSS的語法主要由兩個部分組成&#xff0c;一個是選擇器&#xff0c;一個是屬性、 選擇器又分為以下幾種&#xff1a; 1.元素選擇器&#xff1a;即Html標簽去掉括號的就是元素 2.類選擇器&#xff1a;所謂的類就是說class“名稱”&#xff0c;類的名稱是可以相同&am…

Android 清除png圖片的白色背景

/**清除背景顏色 * param mBitmap* param mColor 背景顏色值 eg&#xff1a;Color.WHITE** return*/ private static Bitmap getAlphaBitmap(Bitmap mBitmap, int mColor) {Bitmap mAlphaBitmap Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Confi…

【ArcGIS遇上Python】Python使用柵格數據

柵格數據是一個獨特的空間數據類型。很多地理處理工具都是為了處理柵格數據而開發的。 1. 列出柵格數據 ListRaster函數是以Python列表的形式返回工作控件中的柵格數據,該函數的語法格式是: ListRaster({wild_card},{raster_type}) 可選參數wild_card通過名稱限制返回的結果…