1. 程式人生 > >通過SignalR技術整合即時通訊(IM)在.NET中應用落地

通過SignalR技術整合即時通訊(IM)在.NET中應用落地

![img](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112946782-1622713745.jpg) ## 1、引言 ## **即時通訊(IM)**是RDIFramework.NET敏捷開發框架全新提供的一個基於Web的即時通訊、內部聊天溝通的工具。介面美觀大方對於框架內部進行訊息的溝通非常方便。基於RDIFramework.NET敏捷開發框架的即時通訊IM支援常規的使用者對使用者(點對點)聊天、工作流程流轉的提醒、服務端訊息的推送等。訊息到達還有類似QQ的聲音提醒,同時對訊息進行了持久化處理,即時離線的使用者,上線後也會收到訊息,不會造成訊息的丟失。還提供了很多擴充套件介面供使用者實際擴充套件使用,非常的強大,方便。 通過“企業內部聊天IM”我們可以擴充套件很多應用出來。這兒特別說明的是我們的IM使用的是SignalR技術。.NET SignalR 是為.NET 開發人員提供的一個庫,可以簡化開發人員將實時 Web 功能新增到應用程式的過程。實時 Web 功能是指這樣一種功能:當所連線的客戶端變得可用時伺服器程式碼可以立即向其推送內容,而不是讓伺服器等待客戶端請求新的資料。什麼是實時通訊的Web呢?就是讓客戶端(Web頁面)和伺服器端可以互相通知訊息及呼叫方法,當然這是實時操作的。SignalR提供了非常簡單易用的高階API,使伺服器端可以單個或批量呼叫客戶端上的JavaScript函式,並且非常方便地進行連線管理,例如客戶端連線到伺服器端,或斷開連線,客戶端分組,以及客戶端授權,使用SignalR都非常 容易實現。 ![體系結構關係圖](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112947494-94281754.png) ## 2、什麼是SignalR ASP.NET SignalR 是 ASP.NET 開發人員的庫,可簡化將實時 web 功能新增到應用程式的過程。 實時 web 功能使伺服器程式碼能夠在可用時立即將內容推送到連線的客戶端,而不是讓伺服器等待客戶端請求新的資料。 SignalR 可用於將任何種類的 "實時" web 功能新增到 ASP.NET 應用程式。 儘管聊天通常用作示例,但你可以執行更多操作。 使用者每次重新整理網頁以檢視新資料,或者頁面實現 [長輪詢](http://en.wikipedia.org/wiki/Push_technology#Long_polling) 來檢索新資料時,都是使用 SignalR 的候選項。 示例包括儀表板和監視應用程式、協作應用程式 (例如同步編輯文件) 、作業進度更新和實時窗體。 SignalR 還啟用了全新型別的 web 應用程式,這些應用程式需要伺服器中的高頻率更新,例如,實時遊戲。 SignalR 提供了一個簡單的 API,用於建立 (RPC) 的伺服器到客戶端遠端過程呼叫,該程式呼叫客戶端瀏覽器中的 JavaScript 函式 (和從伺服器端 .NET 程式碼) 的其他客戶端平臺。 SignalR 還包括用於連線管理的 API (例如,連線和斷開連線事件) ,以及對連線進行分組。 ![image-20210207110551451](https://img2020.cnblogs.com/news/157572/202102/157572-20210207112949307-1965016566.png) SignalR 自動處理連線管理,讓你可同時向所有連線的客戶端廣播訊息,就像聊天室一樣。 也可以向特定客戶端傳送訊息。 客戶端和伺服器之間的連線是持久的,不同於傳統的 HTTP 連線,後者針對每次通訊重新建立。 SignalR 支援 "伺服器推送" 功能,在該功能中,伺服器程式碼可以使用遠端過程呼叫來呼叫瀏覽器中的客戶端程式碼 (RPC) ,而不是目前在 web 上通用的請求-響應模式。 使用內建和第三方橫向擴充套件提供程式,SignalR 應用程式可以向外擴充套件到數千個客戶端。 ## 3、SignalR技術核心 ## SignalR技術主要用途:它出現的主要目的是實現伺服器主動推送(Push)訊息到客戶端頁面,這樣客戶端就不必重新發送請求或使用輪詢技術來獲取訊息。可以用在聊天室、看板、單點通訊、多點通訊,甚至可以結合其他技術用來做視訊聊天,當然也有其他用途。 SignalR實現機制:SignalR 的實現機制與 .NET WCF是相似的,都是使用遠端代理來實現。在具體使用上,有兩種不同目的的介面:PersistentConnection 和 Hubs,其中 PersistentConnection 是實現了長時間的 JavaScript 輪詢(類似於 Comet),Hub 是用來解決實時資訊交換問題,它是利用 Javascript 動態載入執行方法實現的。SignalR 將整個連線,資訊交換過程封裝得非常漂亮,客戶端與伺服器端全部使用 JSON 來交換資料。 基本流程圖: ![SignalR基本流程](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112949805-637964426.png) ## 4、功能展示 ## 即時通訊(IM)包含SignalR服務端,我們內部聊天IM的服務端如下圖所示,要使用IM,必須要先啟動服務端。 ![image-20210207105259939](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112950289-1743005523.png) 登入框架後在主介面右下解會顯示即時通訊(IM)的圖示,不佔用使用者的介面空間。有新資訊帶來時圖示會自動閃爍,同時會有聲音提醒非常的方便,類似QQ一樣。 ![image-20210207105516303](https://img2020.cnblogs.com/news/157572/202102/157572-20210207112950890-1833428041.png) 單擊圖示會顯示企業內部聊天IM主介面,如下圖所示。在IM介面按部門對使用者進行了分組的展示。 ![image-20210207105636235](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112951411-1907501443.png) 線上使用者會高亮顯示,如下圖所示。 ![image-20210207105649706](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112952026-251593970.png) 雙擊一個使用者,即可給指定使用者傳送資訊,聊天介面如下圖所示: ![image-20210207105752123](https://img2020.cnblogs.com/news/157572/202102/157572-20210207112953037-1154075812.png) 在上圖中,我們給“陳俊熙”發了一條訊息,我們現在以”wikstone”陳俊熙使用者登入框架,登入成功會自動提示訊息,如下圖所示: ![image-20210207105923956](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112953612-1677532044.png) ![image-20210207105856196](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112954281-337230494.png) 在彈出的聊天視窗,我們也可以給傳送訊息的使用者直接回復。 “企業內部聊天IM”不僅可以做為簡單的聊天工具,同時在業務協同辦公過程中也有很好的支援,如:當用戶收到一個待辦業務時,IM也會自動進行帶聲音的提示,如下圖所示。 ![image-20210207110214424](https://img2020.cnblogs.com/news/157572/202102/157572-20210207112955487-912341528.png) ## 5、參考文章 ## - [全新跨平臺版本.NET敏捷開發框架-RDIFramework.NET5.0震撼釋出](http://blog.rdiframework.net/article/241) - [RDIFramework.NET — 基於.NET的快速資訊化系統開發框架 — 系列目錄](http://blog.rdiframework.net/article/190) - [RDIFramework.NET敏捷開發框架 ━ 工作流程元件介紹](http://blog.rdiframework.net/article/233) - [RDIFramework.NET敏捷開發框架 ━ 工作流程元件Web業務平臺](http://blog.rdiframework.net/article/234) - [RDIFramework.NET敏捷開發框架 ━ 工作流程元件WinForm業務平臺](http://blog.rdiframework.net/article/172) - [微信公眾號開發系列-玩轉微信開發-目錄彙總](http://blog.rdiframework.net/article/216) - [.NET Core部署到linux(CentOS)最全解決方案,常規篇](http://blog.rdiframework.net/article/244) - [.NET Core部署到linux(CentOS)最全解決方案,進階篇(Supervisor+Nginx)](http://blog.rdiframework.net/article/245) - [.NET Core部署到linux(CentOS)最全解決方案,高階篇(Docker+Nginx 或 Jexus)](http://blog.rdiframework.net/article/246) - [.NET Core部署到linux(CentOS)最全解決方案,入魔篇(使用Docker+Jenkins實現持續整合、自動化部署)](http://blog.rdiframework.net/article/248) - [一網打盡,一文講通虛擬機器VirtualBox及Linux使用](http://blog.rdiframework.net/article/243) - [一文講通.NET Core部署到Windows IIS最全解決方案](http://blog.rdiframework.net/article/249) - [常用linux命令,開發必備](http://blog.rdiframework.net/article/247) ### 5.1、SignalR開發相關 ### - [史上最全面的SignalR系列教程-目錄彙總](http://blog.rdiframework.net/article/230) - [史上最全面的SignalR系列教程-1、認識SignalR](http://blog.rdiframework.net/article/225) - [史上最全面的SignalR系列教程-2、SignalR 實現推送功能-永久連線類實現方式](http://blog.rdiframework.net/article/226) - [史上最全面的SignalR系列教程-3、SignalR 實現推送功能-集線器類實現方式](http://blog.rdiframework.net/article/227) - [史上最全面的SignalR系列教程-4、SignalR 自託管全解(使用Self-Host)-附各終端詳細例項](http://blog.rdiframework.net/article/228) - [史上最全面的SignalR系列教程-5、SignalR 實現一對一聊天](http://blog.rdiframework.net/article/231) - [史上最全面的SignalR系列教程-6、SignalR 實現聊天室](http://blog.rdiframework.net/article/232) - [RDIFramework.NET敏捷開發框架通過SignalR技術整合即時通訊(IM)](http://blog.rdiframework.net/article/229) ### 5.2、框架相關 ### - [微信公眾號開發系列-玩轉微信開發-目錄彙總](http://blog.rdiframework.net/article/216) - [RDIFramework框架整合微信開發應用效果展示](http://blog.rdiframework.net/article/219) - [RDIFramework.NET框架基於Quartz.Net實現任務排程詳解及效果展示](http://blog.rdiframework.net/article/221) - [RDIFramework.NET — 基於.NET的快速資訊化系統開發框架 — 系列目錄](http://blog.rdiframework.net/article/190) - [RDIFramework.NET ━ .NET快速資訊化系統開發框架 ━ 工作流程元件介紹](http://blog.rdiframework.net/article/169) - [RDIFramework.NET框架SOA解決方案(集Windows服務、WinForm形式與IIS形式釋出)-分散式應用](http://blog.rdiframework.net/article/189) - [RDIFramework.NET程式碼生成器全新V3.5版本釋出-重大升級](http://blog.rdiframework.net/article/199) ----- 一路走來數個年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過下面的地址瞭解詳情。 RDIFramework.NET官方網站:[http://www.rdiframework.net/](http://www.rdiframework.net/) RDIFramework.NET官方部落格:[http://blog.rdiframework.net/](http://blog.rdiframework.net/) 特別說明,框架相關的技術文章請以官方網站為準,歡迎大家收藏! RDIFramework.NET框架由海南國思軟體科技有限公司專業團隊長期打造、一直在更新、一直在升級,請放心使用! 歡迎關注RDIFramework.NET框架官方微信公眾號(微訊號:**guosisoft**),及時瞭解最新動態。 使用微信掃描二維碼立即關注 ![微信二維碼](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112955919-1772255