1. 程式人生 > >基於SignalR、ActiveMQ實現webform的實時訊息廣播

基於SignalR、ActiveMQ實現webform的實時訊息廣播

       什麼是SignalR?

      ASP.NET SignalR 是為.NET 開發者提供即時通訊Web 應用的類庫。即時通訊Web服務就是伺服器將內容自動推送到已經連線的客戶端,而不是伺服器等待客戶端發起一個新的資料請求。

     SignalR能夠被運用到各種型別的即時響應應用。你完全可以運用SignalR實現一個線上即時聊天應用。當然SignalR也運用在使用者需要隨時更新資料的網頁運用,比如儀表盤和監控運用,其他協同應用程式(文件協同操作)、工作流更新或者是即時表格。

       SignalR 提供了使用JavaScript API 方法建立伺服器對客戶端的遠端過程呼叫協議(RPC)的,它能夠讓你從客戶端瀏覽器(或者其他平臺)從.NET服務端發起遠端呼叫。SignalR 同樣提供了管理遠端連線和連線組的API方法。

       SignalR 不僅能夠自動管理連線,而且能夠同時向所有的客戶端廣播訊息,就像聊天室一樣。你也能夠傳送訊息到指定的客戶端。SignalR提供的連線是持久的,它不像傳統的HTTP連線需要為每次收發訊息建立單獨的連線。

         SignalR 同時在服務端提供了遠端過程呼叫協議(RPC),讓你能夠“主動”推送訊息到瀏覽器中的客戶端,而不像普通的Web服務一樣的應答方式。

ActiveMQ介紹

    MQ是訊息中介軟體,是一種在分散式系統中應用程式藉以傳遞訊息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的開源專案,完全支援JMS1.1和J2EE1.4規範的JMS Provider實現。

特點:

1、支援多種語言編寫客戶端

2、對MVC、WebFrom的支援,很容易和MVC、WebFrom整合

3、支援多種傳輸協議:TCP,SSL,NIO,UDP等

4、支援AJAX

訊息形式:

1、點對點(queue)

2、一對多(topic)

例項專案工程簡介

工程目錄如下圖:

Signalr.ActiveMQ:類庫專案,包含訊息生產者及訊息消費者

ProcucerDome:控制檯專案,模擬前置機發送訊息

SignalRDome:asp.net web專案,模擬web客戶端

一、建立asp.net web應用程式(SignalRDome)

第一步:開啟一個SignalRDome專案檔案

加入SignalR引用,在程式包管理控制檯輸入命令:Install-package Microsoft.Aspnet.Signalr

加入SignalR成功後的專案目錄

第二步:加入ActiveMQ引用,在程式包管理控制檯輸入命令:Install-Package Apache.NMS.ActiveMQ

第三步:加入Signalr.ActiveMQ引用

第四步:在SignalRDome專案的根目錄下建立SignalR資料夾,並在資料夾中建立客戶端hub代理類(ChatHub)

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using SignalR.ActiveMQ;
using System.Threading.Tasks;
using System.Web;

namespace SignalRDome.SignalR
{
    [HubName("chatHub")]
    public class ChatHub : Hub
    {
        public void Send(string message,string call = "")
        {
            Procucer.GetInstance().Send(message,call);
        }
        public override Task OnConnected()
        {
            Customer.Clients = this.Clients;
            return base.OnConnected();
        }

        public override Task OnDisconnected(bool stopCalled)
        {
            Customer.Clients = this.Clients;
            return base.OnDisconnected(stopCalled);
        }
    }
}

第五步:建立Startup

using Microsoft.Owin;
using Owin;
using SignalR.ActiveMQ;
using System;

[assembly: OwinStartup(typeof(SignalRDome.SignalR.Startup))]
namespace SignalRDome.SignalR
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();

            Customer.Run();//啟動消費者監聽執行緒
        }
    }
}

第六步:在前臺頁面中加入監聽,一半新增在Index.aspx中

<script src="Scripts/jquery-1.10.2.min.js"></script>
<script src="Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src="signalr/hubs"></script>

<script type="text/javascript">
    $(function () {

        ///可以在這裡進行許可權驗證,沒有許可權的客戶端,不建立監聽
        var handler = $.connection.chatHub;// 生成客戶端hub代理
        // 新增客戶端hub方法以供服務端呼叫
        handler.client.broadcastMessage = function (call, msg) {
            //接收服務端訊息
            alert(msg);
        }
        //日誌輸出,以備除錯使用
        $.connection.hub.logging = true;
        // 開啟hub連線
        $.connection.hub.start();
    });
</script>

至此asp.net web應用程式處理完成。

二、建立控制檯應用程式(ProcucerDome)

第一步:引用Signalr.ActiveMQ

第二步:建立併發送訊息

using SignalR.ActiveMQ;
using System;

namespace ProcucerDome
{
    class Program
    {
        static void Main(string[] args)
        {
            ///模擬前置機發送報警訊息
            Console.WriteLine("請輸入要向客戶端傳送的訊息:");
            Procucer producer =  Procucer.GetInstance();//建立訊息生產者
            while (true)
            {
                var msg = Console.ReadLine();//模擬報警訊息
                producer.Send(msg);//傳送訊息
            }
        }
    }
}

至此,控制檯應用程式處理完畢。

三、啟動順序

1、啟動ActiveMQ程式

       A)ActiveMQ伺服器上要安裝JAVA執行環境

    c)解壓縮後雙擊apache-activemq-5.15.4\bin\win64\activemq.bat執行ActiveMQ程式。若伺服器為32位系統,則雙擊win32檔案下的activemq.bat執行ActiveMQ程式。

2、啟動ProcucerDome專案

3、啟動SignalRDome,開多個瀏覽器視窗,模擬多個SignalR客戶端

注意事項:重啟ActiveMQ程式後,應立即重啟ProcucerDome及IIS,否則將出現前置機無法傳送訊息、web客戶端無法接收訊息情況。

注:SignalR參考地址:https://docs.microsoft.com/zh-cn/aspnet/signalr/

相關推薦

基於SignalRActiveMQ實現webform實時訊息廣播

       什麼是SignalR?       ASP.NET SignalR 是為.NET 開發者提供即時通訊Web 應用的類庫。即時通訊Web服務就是伺服器將內容自動推送到已經連線的客戶端,而不是伺服器等待客戶端發起一個新的資料請求。      SignalR能夠被

基於Tomcat + JNDI + ActiveMQ實現JMS的點對點訊息傳送

前言   寫了一個簡單的JMS例子,之所以使用JNDI 是出於通用性考慮,該例子使用JMS規範提供的通用介面,沒有使用具體JMS提供者的介面,這樣可以保證我們編寫的程式適用於任何一種JMS實現(ActiveMQ、HornetQ...)。 什麼是JNDI   JNDI(Java Naming and Di

採用基於MQTT的ActiveMQ實現訊息推送

由於訊息推送,個人感覺人難度,所以到網上找一個開源的系統用,感覺很不錯。 網上現在主要有兩種對於訊息推送的開源專案解決方案,一個是基於XMAPP的,還有一個就是基於MQTT的了。由於MQTT相對於XMAPP較輕量點,便試試它,感覺還挺不錯的。 1.下載服務端 我這裡,下載

基於pythonface++實現人臉檢測人臉識別

face++做的人臉識別應該是我目前接觸到的效果最好的了。這家公司也是個獨角獸,專門做人臉識別這塊的,返回的照片的資訊很全,也好呼叫。不過只提供線上的,不提供離線sdk沒法做一些實時性的東西。 import requests from json import JSONDecoder import

基於python3 face_recognition 實現人臉檢測

face_recognition 是一個python的開源人臉識別庫  號稱是識別率百分之99  (雖然我沒感覺到)網上資料非常多,而且用這個做實時性的人臉識別效率還可以(雖然初始化慢...)   話不多說上程式碼 # 識別圖片中的所有人臉並顯示出來 # 匯入pil

基於 DockerKubernetes 實現高效可靠的規模化 CI/CD 流水線的搭建

本文來自作者 邸富傑 在 GitChat 上分享,「閱讀原文」檢視交流實錄 「文末高能」 編輯 | 庫克 高效可靠的 CI/CD 流水線是一個IT組織實現軟體服務快速交付的基礎,現如今大量

基於html5JS實現的二維碼掃碼

原理:調出攝像頭,拍照儲存到畫布,定時傳送到解析函式說明:解析函式是後臺c# .net MVC 實現的,解析函式用到的二維碼解析API依賴於第三方二維碼庫google zxing , 因此需要先引用類庫:zxing.dll、zxing.presentation.dll,如果你

基於swooleredis集合做一個訊息訂閱

利用swoole開啟常駐程序,需要幾個按自己的情況來定,swoole程序數最好是和伺服器cpu核數相等上篇和這裡我用的都是woker程序沒有用task_workerredis 有序集合score可以按時間戳來吧需要傳送的資料儲存起來利用swoole啟動的常駐程序不斷的去探測,

基於html5JS實現的拍照上傳圖片

原理:調出攝像頭,拍照儲存到畫布,將圖片URi傳送到後臺 前端程式碼(Index.cshtml): <style> #video,#canvas {display: block;margin:1em auto;width:180px;height:180px

最全FlumeElasticSearchKibana實現日誌實時展示

今天一天的時間,成功使用flume把日誌扇入ElasticSearch中,並執行Kibana實現日誌的初步展示,記錄於此。1:ES叢集的搭建不予贅述,可參考:如何搭建ES叢集2:Flume與ES協同這一部分堪稱是重中之重,主要的時間就是花費在這上面了。flume的sink裡,

Spring + JMS + ActiveMQ實現簡單的訊息佇列(監聽器非同步實現

首先宣告:以下內容均是在網上找別人的部落格綜合學習而成的,可能會發現某些程式碼與其他博主的相同,由於參考的文章比較多,這裡對你們表示感謝,就不一一列舉,如果有侵權的地方,請通知我,我可以把該文章刪除。 1、jms-xml Spring配置檔案 <?xml versi

Spring + ActiveMQ實現jms傳送訊息

1. 概述:Spring提供了一個用於簡化JMS API使用的抽象框架,並且對使用者遮蔽了JMS API中1.0.2和1.1版本的差異。JMS的功能大致上分為兩塊,叫做訊息製造和訊息消耗。JmsTemplate 用於製造訊息和同步訊息接收。我們今天就用JmsTemplate

Asp.net SignalR 實現服務端訊息實時推送到所有Web端

ASP .NET SignalR是一個ASP .NET 下的類庫,可以在ASP .NET 的Web專案中實現實時通訊。實際上 Asp.net SignalR 2 實現 服務端訊息推送到Web端, 更加簡單

SignalR SelfHost實時訊息,整合到web中,實現伺服器訊息推送

先前用過兩次SignalR,但是中途有段時間沒弄了,今天重新弄,發現已經忘得差不多了,做個筆記! 首先建立一個控制檯專案Nuget新增引用聯機搜尋:Microsoft.AspNet.SignalR.SelfHostMicrosoft.Owin.Cors 在Program.cs新增程式碼新增一個

基於express+redis高速實現實時在線用戶數統計

posit itl git term agent bus class net img 作者:zhanhailiang 日期:2014-11-09 本文將介紹怎樣基於express+redis高速實現實時在線用戶數統計。 1. 在github.com上創建項目u

MySQL 基於存儲過程 實現數據統計按日月份統計模板

ont sql 數據 過程 %x tail art bar 變量 存儲過程developer_count 是根據傳入參數searchType 決定是使用那種查詢方式,本存儲過程中包含的其他的參數是{起始時間:startime,結束時間:endtime} [ht

apache分別基於三種方案實現tomcat的代理負載均衡及會話綁定

tomcat apacheapache分別基於mod_proxy_ajp, mod_proxy_http, mod_jk三種方案實現代理、負載均衡、會話綁定及Tomcat session cluster1、nginx, haproxy, apache(mod_proxy_ajp, mod_proxy_http

基於公有雲平臺實現直播點播及小視頻功能(二)

騰訊 去除 使用 商業 png wowza 技術分享 傳感器 都是 呵呵,上一節不知道怎麽的就開始扯起了電視的發展,不過確實是勾起了我童年的回憶,這節我們正式進入正題,先說說直播。直播這個詞看到以後,讓我們想到的是什麽?其實感覺也沒什麽,因為已經很普及,是否更多的是想到了直

Apache搭建虛擬主機(基於IP端口域名實現)內附源碼包

多臺 主機 enable tps alt 防火墻 -- gcc 一定的 簡介 虛擬主機是指在網絡服務器上分出一定的磁盤空間,管理員可以利用此部分空間,放置站點及應用組件,提供必要的數據存放和傳輸功能。虛擬主機,就是把一臺運行在互聯網上的物理服務器劃分成多個“虛擬”服務器。

基於Netty實現的Android 訊息推送(即時通訊)的解決方案

根據Netty框架實現訊息推送(即時聊天)功能. Netty框架,TCP長連線,心跳,阻塞訊息佇列,執行緒池處理訊息傳送, 基於Google ProtoBuf自定義的訊息協議, TCP粘包/拆包.... 客戶端通過TCP連線到伺服器,並建立TCP長連線;當伺服器端收到新訊息後通過TCP連線推送給