基於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/
相關推薦
基於SignalR、ActiveMQ實現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.下載服務端 我這裡,下載
基於python、face++實現人臉檢測、人臉識別
face++做的人臉識別應該是我目前接觸到的效果最好的了。這家公司也是個獨角獸,專門做人臉識別這塊的,返回的照片的資訊很全,也好呼叫。不過只提供線上的,不提供離線sdk沒法做一些實時性的東西。 import requests from json import JSONDecoder import
基於python3、 face_recognition 實現人臉檢測
face_recognition 是一個python的開源人臉識別庫 號稱是識別率百分之99 (雖然我沒感覺到)網上資料非常多,而且用這個做實時性的人臉識別效率還可以(雖然初始化慢...) 話不多說上程式碼 # 識別圖片中的所有人臉並顯示出來 # 匯入pil
基於 Docker、Kubernetes 實現高效可靠的規模化 CI/CD 流水線的搭建
本文來自作者 邸富傑 在 GitChat 上分享,「閱讀原文」檢視交流實錄 「文末高能」 編輯 | 庫克 高效可靠的 CI/CD 流水線是一個IT組織實現軟體服務快速交付的基礎,現如今大量
基於html5、JS實現的二維碼掃碼
原理:調出攝像頭,拍照儲存到畫布,定時傳送到解析函式說明:解析函式是後臺c# .net MVC 實現的,解析函式用到的二維碼解析API依賴於第三方二維碼庫google zxing , 因此需要先引用類庫:zxing.dll、zxing.presentation.dll,如果你
基於swoole、redis集合做一個訊息訂閱
利用swoole開啟常駐程序,需要幾個按自己的情況來定,swoole程序數最好是和伺服器cpu核數相等上篇和這裡我用的都是woker程序沒有用task_workerredis 有序集合score可以按時間戳來吧需要傳送的資料儲存起來利用swoole啟動的常駐程序不斷的去探測,
基於html5、JS實現的拍照上傳圖片
原理:調出攝像頭,拍照儲存到畫布,將圖片URi傳送到後臺 前端程式碼(Index.cshtml): <style> #video,#canvas {display: block;margin:1em auto;width:180px;height:180px
最全Flume、ElasticSearch、Kibana實現日誌實時展示
今天一天的時間,成功使用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連線推送給