從現在開始相關文章請到: http://lko2o.com/moon
接續上一篇:《ASP.NET SignalR系列》第一課 認識SignalR (還沒有看的話,建議您先看看)
一、指定通信方式
建立一個通訊方式需要一定的時間和客戶機/服務器資源。如果客戶機的功能是已知的,那么通信方式在客戶端連接開始的時候就可以指定。下面的代碼片段演示了使用AJAX長輪詢方式來啟動一個連接,將如果我們知道該客戶端不支持其他的協議的話:
connection.start({ transport: 'longPolling' });
你可以指定一個替補方式,如果你想讓客戶端按照順序嘗試通訊方式的話.下面的代碼片段展示了嘗試使用WebSocket,如果失敗直接使用長輪詢。
connection.start({ transport: ['webSockets','longPolling'] });
指定將字符串常量定義如下:
-
webSockets
-
foreverFrame
-
serverSentEvents
-
longPolling
二、連接和集線器(Hubs)
SignalR API包括兩種模型(用於客戶端和服務端的通信):持久連接模型(Persistent Connections)和集線器(Hubs)模型
一個連接代表一個簡單的終結點(相當於單個收件人、被分組的、廣播消息 而言)
持久連接API(在.NET代碼中以PersistentConnection呈現),它使得開發人員便捷使用SignalR暴露的底層通訊協議
連接通信模型,對習慣於使用類似WCF的同學們比較熟悉.
集線器模型是一個建立於連接API的高級管道.SignalR處理誇機器便捷的調度問題易如反掌,它使得客戶端調用服務端的方法簡單得猶如調用本地方法一樣.反之亦然.
使用Hubs模型,或許對那些使用過.net remoting的人來講就很容易理解了.使用Hub還可以讓你對強類型參數方法、model綁定成為易事.
三、架構圖
下面的架構圖展示了Hubs和持久連接及潛在技術直接關系.
四、Hub如何工作
當服務器端代碼調用客戶端上的方法時,一個數據包會被傳輸在活躍的通信方式上,該通訊方式包含要調用的方法的名稱和參數(當一個對象作為方法參數被傳輸時,把它序列化JSON)。然后客戶端匹配方法的名字(客戶端代碼中定義的)。如果有匹配,該方法將會被執行.
我們可以用Fiddler.來監控方法的調用過程.下圖展示了一個從服務端來的方法調用.
從Hub傳來的方法叫做MoveShapeHub
,將被調用的方法及叫做updateShape
在這個例子中,Hub的名字以H參數識別,方法名以M參數識別,傳輸的數據以A參數識別.
上面例子的代碼:High-Frequency Realtime
四、如何選擇通信模型呢?
大多數程序應該選擇Hubs API.連接API可以在以下情形中使用:
- 實際消息發送的格式需要被指定
- 開發人員跟喜歡使用消息和調度模型
- 一個已經存在的應用程序(它使用了消息模型)