從上面的介紹能夠看出,SignalR既然是爲實時而生的,這樣就決定了其使用場所。具體適用情景有以下幾點:javascript
Asp.net SignalR是微軟爲實現實時通訊的一個類庫。通常狀況下,signalR會使用JavaScript的長輪詢(long polling)的方式來實現客戶端和服務器通訊,隨着Html5中WebSockets出現,SignalR也支持WebSockets通訊。另外SignalR開發的程序不單單限制於宿主在IIS中,也能夠宿主在任何應用程序,包括控制檯,客戶端程序和Windows服務等,另外還支持Mono,這意味着它能夠實現跨平臺部署在Linux環境下。java
signalR內部有兩類對象:jquery
SignalR將整個信息的交換封裝起來,客戶端和服務器都是使用JSON來溝通的,在服務端聲明的全部Hub信息,都會生成JavaScript輸出到客戶端,.NET則依賴Proxy來生成代理對象,而Proxy的內部則是將JSON轉換成對象。api
SignalR的服務端提供了兩種實現方式,分別是PersistentConnection和Hub,這兩種方式的側重點不一樣:服務器
PersistentConnection | Hub/生成Proxy模式 | Hub/非生成Proxy模式 | |
服務端配置 | app.Map("/messageConnection", map => |
app.Map("/messageHub", map => |
app.Map("/messageHub", map => |
引入js文件 | jquery-1.6.4.min.js jquery.signalR-2.2.0.min.js |
jquery-1.6.4.min.js jquery.signalR-2.2.0.min.js /messageHub/js 上述js文件是動態生成,其中messageHub的爲服務端定義的路徑 |
jquery-1.6.4.min.js jquery.signalR-2.2.0.min.js |
建立鏈接 | var connection = $.connection("/message"); | var connection = $.connection; | var connection = $.hubConnection(); |
開啓鏈接 | connection.start() |
connection.hub.start() |
connection.start() |
代理對象 | 無 | var proxy = connection.MessageService; MessageService是Hub的名稱 |
var proxy = connection.createHubProxy("MessageService"); MessageService是Hub的名稱 |
定義客戶端方法 | 無 | proxy.client.hello = function (message) { } |
proxy.on("hello", function (message) { console.log(message); }); |
接收消息 | connection.received(function (message) { |
經過服務器調用客戶端方法實現 |
經過服務器調用客戶端方法實現 |
發送消息 | connection.send(message); | 經過調用服務端方法實現 proxy.server.hello(message); |
經過調用服務端方法實現 proxy.invoke("hello", message); |
設置QueryString | 在建立connection時指定 var connection = $.connection("/messageConnection", { username: "qs" + username }); |
connection.hub.qs = { username: "qs" + username }; |
connection.qs = { username: "qs" + username }; |
設置Cookie | document.cookie = "username=" + username; | document.cookie = "username=" + username; | document.cookie = "username=" + username; |
設置State | 無 | proxy.state.ClientType = "HubAutoProxy"; | proxy.state.ClientType = "HubNonAutoProxy"; |
示例代碼下載
容易碰到的問題:
1.預約義的類型「Microsoft.CSharp.RuntimeBinder.Binder」未定義或未導入:https://blog.csdn.net/rztyfx/article/details/61432763
2.Owin:
Install-Package microsoft.owin.cors
Update-Package Owin -Reinstall
3.關於SignalR鏈接數量問題的記錄:https://blog.csdn.net/Andrewniu/article/details/80243120