【SignalR全套系列】之在.Net Core 中實現SignalR實時通信

来源:https://www.cnblogs.com/qubiancheng666/archive/2022/06/09/16358335.html
-Advertisement-
Play Games

【SignalR全套系列】之在.Net Core 中實現SignalR實時通信 ...


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

前文回顧

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

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

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


SignalR 的基本使用


原文鏈接:【SignalR全套系列】之在.Net6中實SignalR通信


簡介

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

服務端實現

新建.net6項目

編輯

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庫

編輯

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')
 3
 4    // 調用AllClientResponse這個方法
 5    const all = () => connection.send('AllClientResponse')
 6
 7    // 觸發後臺控制器
 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實現客戶端與服務端通信的基本方法,下篇文章將演示分組通信

更多精彩內容盡在公眾號:



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要內容 1·學習java日誌體系及日誌工具的演進 2·瞭解日誌採集、處理、分析等各階段的常用中間件 3·學會搭建完整的elk日誌平臺 4·學習日誌打點,切麵,日誌文件等輸出手段 5·項目實戰,完成一訪問日誌鏈路的跟蹤 1、Java日誌體系 1.1 體系概述 1.1.1 日誌介面 JCL:Apach ...
  • 前面我們詳細介紹了SSO、OAuth2的定義和實現原理,也舉例說明瞭如何在微服務框架中使用spring-security-oauth2實現單點登錄授權伺服器和單點登錄客戶端。目前很多平臺都提供了單點登錄授權伺服器功能,比如我們經常用到的QQ登錄、微信登錄、新浪微博登錄、支付寶登錄等等。 如果我們自己 ...
  • 一個工作了3年的粉絲,去一個互聯網公司面試,結果被面試官懟了。 面試官說:”這麼簡單的問題你都不知道? 沒法聊了,回去等通知吧“。 這個問題是: ”什麼是可重入鎖,以及它的作用是什麼?“ 對於這個問題,來看看普通人和高手的回答吧 普通人: 嗯。。。。。。。。。。。。。。。。。。 高手: 好的。 可重 ...
  • JDBC概述 JDBC(Java Data Base Connectivity,java資料庫連接)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。是Java訪問資料庫的標準規範。 JDBC提供了一種基準,據此可以構建更高級的工 ...
  • 手把手教你使用 Spring Boot 3 開發上線一個前後端分離的生產級系統(一) - 介紹 手把手教你使用 Spring Boot 3 開發上線一個前後端分離的生產級系統(二) - 資料庫設計 手把手教你使用 Spring Boot 3 開發上線一個前後端分離的生產級系統(三) - 項目初始化 ...
  • 來源:cnblogs.com/lwtyyds/p/15678152.html 常用類概述 內部類 Object類 包裝類 數學類 時間類 字元串 String Builder和StringBuffer DecimalFormat 內部類 「概念」 :在一個類內部再定義一個完整的類。 一般情況下類與類 ...
  • 0. 文章目的 面向有一定基礎的C#初學者,介紹C#中介面的意義、使用以及特點。 1. 閱讀基礎 瞭解C#基本語法(如定義一個類、繼承一個類) 理解OOP中的基本概念(如繼承,多態) 2. 什麼是介面 2.1 現實中的協定與介面 貓貓頭在整理電腦文件,需要一個小工具來分類文件,於是貓貓頭向群里求助: ...
  • 好久沒到園子裡面逛了,回來看了看,.NET有點式微呀?Java/Spring/Linux……比以前多了很多,為什麼?博客園可是.NET的大本營了呀! 好吧,我承認,飛哥也動搖了,去年在ASP.NET的基礎上,開了一期Java Web班。給大家彙報一下心得體會吧: 錄課程前 其實我最開始學(2008年 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...