1. 什麼是SignalR? SignalR 是一個及時消息推送,它與.NET 的 WCF ,WebAPI類似 是客戶端和伺服器進行消息交換的一種工具 2.SignalR 的作用? 它可以實時同步線上客戶端的消息,客戶端通過伺服器將消息發送到一個或者多個連接了這個伺服器的客戶端 3.如何使用Sign ...
1. 什麼是SignalR?
SignalR 是一個及時消息推送,它與.NET 的 WCF ,WebAPI類似 是客戶端和伺服器進行消息交換的一種工具
2.SignalR 的作用?
它可以實時同步線上客戶端的消息,客戶端通過伺服器將消息發送到一個或者多個連接了這個伺服器的客戶端
3.如何使用SignalR開發及時消息發送(mvc下)
準備工作:建項目
使用Nuget添加SignalR的 引用依賴
安裝
配置SignalR:
要使用SignalR之前我們需要對她進行必要的配置,可以從安裝之後自動打開的readme.txt文件知道如何配置SignalR
1.添加啟動項
2.添加signalr的js生成文件夾
這裡是預設地址,如果需要存在其他地方,可以在配置文件中配置
引入signalr 的js文件
這樣就配置完成了,可以進行開發了。。。。
1. 首先我們創建SignalR的Hub
2.在hub中添加方法
這樣 服務端的方法基本就完成了,我們來寫客戶端方法
4.SignalR原理
SignalR 主要是用來解決即時通信的,他的hub相當於是一個伺服器,每個引入了signalr的連入這個伺服器的頁就是一個客戶端,客戶端通過JS 通過hub.server.xxxx() 可以調用到服務端Hub中的方法,然後服務端的這個方法Clinents.All.XXXX()可以調用到所有客戶端的的XXXX()方法
在服務端的Hub中可以通過屬性Clients 來管理每個客戶端,
我們通過hub父類來查看下
我們看到,在hub中有個Clients 屬性,這個屬性是一個集合,集合中的元素類型是dynamic 的,為什麼是dynamic的而不是string,object 等具體類型的呢?
因為我們服務端是不知道客戶端會傳什麼類型過來的,通過dynamic類型可以在運行時自動確認類型,避免object的裝拆箱操作
繼續查看 BaseHub類:
可以看到,BaseHub類中還包含 上下文 Context Grounps組 連接 斷開 再次連接 等操作,在進行相應的操作時,這些方法將會被觸發
關鍵的來了,
SignalR是如何實現在客戶端調用服務端方,在服務端調用客戶端方法的呢? -------------代理
我們打開客戶端頁面,按F12查看,我們發現SignalR自動生成了一個js文件,文件名稱hubs
在這個js文件中,我們可以看到他將我們在服務端定義的方法,通過代理的方式在客戶端生成對應的方法,方法名和服務端的一樣,首字母小寫。
我們在服務端hub上通過指定的hubName特性指定的hub名稱myhub 也出現在了這個js文件中
那麼我們清楚了,signal在項目啟動的時候,通過服務端的hub 在前臺生成一個js,這個JS文件通過代理方式將hub中的方法在前臺也生成一個對應的js方法,方法名稱相同,只是自動生成的js方法,方法名小寫
每個連接到hub伺服器的客戶端,在伺服器中都會生成一個Guid作為其唯一標誌,伺服器的Hub中通過Clients來管理客戶端。
初次寫blog 不足之處,歡迎指正。。。