asp.net core系列 70 即時通迅-WebSocket+Redis發佈訂閱

来源:https://www.cnblogs.com/MrHSR/archive/2019/08/09/11323724.html
-Advertisement-
Play Games

一.概述 在asp.net core 中可以用WebSocket 或asp.net core SignalR來開發即時通迅。在項目中由於開發前後端分離,對於SignalR前端技術人員不想依賴juqery和SignalR.js包,後端確定使用WebSocket 來實現。對於asp.net core有自 ...


一.概述

  在asp.net core 中可以用WebSocket 或asp.net core SignalR來開發即時通迅。在項目中由於開發前後端分離,對於SignalR前端技術人員不想依賴juqery和SignalR.js包,後端確定使用WebSocket 來實現。對於asp.net core有自帶的app.UseWebSockets()中間件,但是使用IIs做為web代理伺服器時,需要在windows系統添加程式iis配置websocket才能使用websocket通訊。於是項目引用了一個開源包Fleck。

  Fleck是對C#Websocket的實現,程式內部使用了System.Net.Sockets類來實現Websocket,不依賴於任何目標框架。 Fleck使用介紹 :https://github.com/statianzo/Fleck

  下麵是msdn文檔原話:

  對於大多數應用程式,我們建議使用 SignalR,而不是原始 Websocket。 SignalR 可為 Websocket 不可用的環境提供傳輸回退。 它還可提供簡單的遠程過程調用應用模型。 並且在大多數情況下,與使用原始 Websocket 相比,SignalR 沒有顯著的性能缺點。

 

  WebSocket客戶端支持:

瀏覽器

支持情況

Chrome

Chrome version 4+支持

Firefox

Firefox version 5+支持

IE

IE version 10+支持

Safari

IOS 5+支持

Android Brower

Android 4.5+支持

二.項目中即時通迅實現架構  

  在我業務項目中實現的流程是:第三方介面發送數據過來,使用redis進行發佈消息, 在web端進行消息訂閱, 把訂閱的消息通過websocket發送到前端站點,前端界面進行局部數據刷新展示,已解決前端即時消息的展示。

 三. 項目實現

  3.1相關包

    (1) 發佈訂閱redis包:Install-Package StackExchange.Redis -Version 2.0.601
    (2) websocket引用 Fleck 包。Install-Package Fleck -Version 1.1.0

   3.2 fleck案例

     關於fleck的websocket的參考如下:https://github.com/statianzo/Fleck/tree/master/src/Samples/ConsoleApp

  3.3 項目中演示效果

      (1) 使用web來做websocket宿主,websocket地址為:ws://127.0.0.1:8181,如下所示websocket服務已啟動

        

 

      (2) 啟動前端界面,下圖可以看到websocket已連接

         前端頁面連接websocket服務關鍵代碼: window.ws = new wsImpl('ws://127.0.0.1:8181',"FootballGoalScore");   具體參考fleck的websocket示例。

 

      (3) 控制台程式使用redis模擬發佈信息, web端redis訂閱消息,再通過websocket服務推送消息到前端頁面,通過下圖可以看到消息已即時傳到

        public void FootballScore(IWebSocketConnection websocke)
        {
            //redis先訂閱消息
            _subscriber.Subscribe("queue2", (msg) =>
            {
                //websocket服務推送消息
                websocke.Send(msg);
                _lLogger.Debug("消息已發送!");
            });
        

     下麵是模擬第三方介面消息達到後,使用redis來發佈消息,發佈後web端redis自動訂閱。

        static void Main(string[] args)
        {
            ISubscriber subscriber = new GFRedisSubscriber();
            //足球比分
            subscriber.Publish("queue2", "1:0");
            //即時歐指
            subscriber.Publish("queue1", "1.69|3.30|3.78");
            Console.ReadLine();
        }

 

 

  參考文獻:

    ASP.NET Core 中的 WebSocket 支持

    ASP.NET Core SignalR 簡介

    WebSocket資料


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

-Advertisement-
Play Games
更多相關文章
  • 1.前言 ASP.NET Core應用程式可以配置和啟動主機(Host)。主機負責應用程式啟動和生存期管理,配置伺服器和請求處理管道。主機還可以設置日誌記錄、依賴關係註入和配置。而host主機又包括Web主機(IWebHostBuilder)和通用主機(IHostBuilder)。該章節主要介紹了用 ...
  • 一、百度語音合成 百度語音合成C# SDK主要是基於Rest API,需要互聯網調用HTTP介面,Rest API 僅支持最多512個漢字,合成的格式文件為MP3,沒有其它的格式。如果想離線使用需下載SDK,Android 或IOS。 1、安裝語音合成 C# SDK C# SDK 現已開源! htt ...
  • 原文地址:https://www.cnblogs.com/lsgsanxiao/p/5845300.html 略有刪改 1.配置文件,可以單獨創建log4net.config文件,然後手動指定目錄,也可以在項目的app.config或web.config的configuration節點下插入以下代碼 ...
  • 1、原程式代碼調用上傳介面文件路徑更改為父節點相對路徑: 2、修複ueditor.config.js配置: 3、IIS配置mime類別,添加相應的視頻文件尾碼配置。 例如:.mp4、.flv等 ...
  • 一張圖搞定 .NET Framework, .NET Core 和 .NET Standard 的區別 ...
  • 在學習 Xamarin.Forms Web 服務教程(https://docs.microsoft.com/zh-cn/xamarin/get-started/tutorials/web-service/index?tabs=vswin) 的時候,使用http 訪問API ,遇到了 "Clearte ...
  • 如何判斷當前修改過的datatable的某一列值是否為int型或double類型 今天在做datatable數據驗證時碰到要對datatable的列數據進行數據類型校驗,因此記錄一下本人校驗的方法,如果還有更簡單的校驗方式,歡迎大家踴躍分享,不勝感激。 c / 取得改變過的datatable,註意不 ...
  • 主要內容有以下部分(URL待補充):CLR 和Windows Loader載入.NET Assembly的過程CLR載入失敗分析分析Windows記憶體架構模型,分配記憶體及垃圾回收其他帶補充的。。。原書封面如下: ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...