1.Socket
2.Socket and websocket(HTML5)
3.SignalR
一,簡介
Signal 是微軟支持的一個運行在 Dot NET 平台上的 html websocket 框架。它出現的主要目的是實現服務器主動推送(Push)消息到客戶端頁面,這樣客戶端就不必重新發送請求或使用輪詢技術來獲取消息。
可訪問其官方網站:https://github.com/SignalR/ 獲取更多資訊。
二,實現機制
SignalR 的實現機制與 .NET WCF 或 Remoting 是相似的,都是使用遠程代理來實現。在具體使用上,有兩種不同目的的接口:PersistentConnection 和 Hubs,其中 PersistentConnection 是實現了長時間的 Javascript 輪詢(類似於 Comet),Hub 是用來解決實時信息交換問題,它是利用 Javascript 動態載入執行方法實現的。SignalR 將整個連接,信息交換過程封裝得非常漂亮,客戶端與服務器端全部使用 JSON 來交換數據。
ASP.NET signalr對ASP.NET開發者來說是一個新的程序庫,它能讓我們更加容易便捷地開發實時通信功能;
signalr允許客戶端和服務器之間雙向通信。服務器可以將內容推送到已連接的客戶端。
signalr支持Web Sockets,遇到其他兼容舊的瀏覽器signalr會用其他技術支持"雙向通信"(不要較真)。
signalr包括這些API:連接管理(例如,連接和斷開連接的事件)、對連接分組、和訪問功能授權。
signalr可以用來添加任何形式的“實時通信”功能到您的ASP.NET應用程序。聊天是經常被用來作為一個應用例子,當然你可以做更多的事情。
用戶常常通過刷新網頁來查看新數據,或者頁面支持長輪詢來檢索新的數據,使用signalr機制中支持這個方式,但它更智能更強大友好。
SignalR同時支持新類型的網絡應用情況:需要高頻度從服務端更新的情況(如實時游戲、看看這個ShootR game.)
SignalR提供了更加便捷簡單的API,
signalr會自動地使用websocket通信(只要條件允許),條件不滿足的時候也會自動使用其他舊的傳輸方式。當然你可以直接讓你的程序直接使用WebSocket.
使用signalr意味着原先你需要自己花精力做的工作不需要再自己做了,因為它已經為你做了。最重要的是,它會持續更新跟進WebSocket技術,所以你不用擔心
協議變化這類事情.
signalr是對客戶端和服務器之間通信方式的一個抽象。一個signalr啟動時使用HTTP連接,然后當環境允許就會直接提升到WebSocket連接。
WebSocket是SignalR的理想通信方式,因為WebSocket使服務器的內存得到最有效的利用,同時WebSocket具有最低的延遲,並擁有最底層特征(如客戶端和服務器之間的全雙工通信),但WebSocket也有最嚴格的要求:WebSocket需要服務器使用Windows Server 2012或Windows 8,和.NET框架4.5。如果不能滿足這些要求,signalr將嘗試使用其他通訊方式進行連接。
下面的列表展示了SignalR決定使用具體哪種通信方式
- 如果瀏覽器<=Internet Explorer 8,用長輪詢的方式
- 如果配置中指定了使用jsonp,則會使用長輪詢的方式
- 如何需要創建跨域連接,將會如使用WebSocket,如果一下條件滿足的話(否則用長輪詢)
- 客戶端支持WebSocket
- 服務端支持WebSocket
- 客戶端支持Cross-Origin Resource Sharing,這個大家自己百度
建立一個通訊方式需要一定的時間和客戶機/服務器資源。如果客戶機的功能是已知的,那么通信方式在客戶端連接開始的時候就可以指定。下面的代碼片段演示了使用AJAX長輪詢方式來啟動一個連接,將如果我們知道該客戶端不支持其他的協議的話:
connection.start({ transport: 'longPolling' });
你可以指定一個替補方式,如果你想讓客戶端按照順序嘗試通訊方式的話.下面的代碼片段展示了嘗試使用WebSocket,如果失敗直接使用長輪詢。
connection.start({ transport: ['webSockets','longPolling'] });
指定將字符串常量定義如下:
-
webSockets
-
foreverFrame
-
serverSentEvents
-
longPolling
SignalR API包括兩種模型(用於客戶端和服務端的通信):持久連接模型(Persistent Connections)和集線器(Hubs)模型
一個連接代表一個簡單的終結點(相當於單個收件人、被分組的、廣播消息 而言)
持久連接API(在.NET代碼中以PersistentConnection呈現),它使得開發人員便捷使用SignalR暴露的底層通訊協議
連接通信模型,對習慣於使用類似WCF的同學們比較熟悉.
集線器模型是一個建立於連接API的高級管道.SignalR處理誇機器便捷的調度問題易如反掌,它使得客戶端調用服務端的方法簡單得猶如調用本地方法一樣.反之亦然.
使用Hubs模型,或許對那些使用過.net remoting的人來講就很容易理解了.使用Hub還可以讓你對強類型參數方法、model綁定成為易事.
SignalR服務端組件可以被部署在一下的服務端和客戶端操作系統中.注意使用WebSockets時,SignalR需要Windows Server 2012 或者Windows 8,
(WebSocket能夠在Windows Azure Web Sites上使用,只要站點的.NET framework 版本達到4.5,且WebSocket能在站點的配置頁面使用)
- Windows Server 2012
- Windows Server 2008 r2
- Windows 8
- Windows 7
- Windows Azure
當SignalR部署在IIS中,需要下面的版本支持。注意如果使用在我們自己的操作系統上,如開發所用的環境(Windows 8 or Windows 7),所有版本的IIS和Cassini不應該被使用,因為這里有一個10同時並發的限制,因為連接是短暫、頻繁重新建立的、且不會立即被dispose,所以很快就會達到限制。IIS Express可以被使用在一般的操作系統上。
同時注意SignalR使用WebSocket時,IIS 8 或者 IIS 8 Express是你需要的,服務器必須用Windows 8, Windows Server 2012, 或者更高,同時WebSocket必須在IIS中可用。你可以去之類看看如何開啟IIS的WebSocket功能:IIS 8.0 WebSocket Protocol Support
- IIS 8 或者IIS 8 Express.
- IIS 7 和 7.5. 需要支持 extensionless URLs .
- IIS 必須跑在集成模式下; 經典模式是不行的.
- 我們的系統程序必須跑在完全信任的模式下.
SignalR能夠在很多客戶端平台下運行,本節描述了客戶端瀏覽器、桌面應用程序、Silverlight應用程序及手機設備在使用SignalR的需求。
1.瀏覽器
SignalR支持許多中種類的瀏覽器,尤其是最近瀏覽器的兩個版本。
在瀏覽器中使用signalr的應用程序必須使用jQuery的版本>=1.6.4.
signalr可在以下瀏覽器中使用:
- IE:8, 9, 10, and 11.現代桌面版和手機版也支持
- Mozilla Firefox:所有版本,請允許我這么說
- Google Chrome: 所有版本,請允許我這么說
- Safari:所有版本,請允許我這么說
- Opera: 所有版本,只支持WINDOWS版本
- Android 瀏覽器
瀏覽器協議需求
通訊協議 Internet
ExplorerChrome
(Windows or iOS)Firefox Safari
(OSX or iOS)Android WebSockets 10+ current - 1 current - 1 current - 1 N/A Server-Sent Events N/A current - 1 current - 1 current - 1 N/A ForeverFrame 8+ N/A N/A N/A 4.1 Long Polling 8+ current - 1 current - 1 current - 1 4.1 2.桌面應用程序和Silverlight程序
注意:有人在做supersocket,所以我們可以讓它運行得更強大,一下是官方給出的圖
桌面應用程序和Silverlight程序通訊協議需求
通訊協議 .NET application Silverlight Web Sockets Windows 8+ and .NET 4.5+ N/A Forever Frame N/A N/A Server-Sent Events .NET 4+ 5+ Long Polling .NET 4+ 5+ 3.Windows Store和Windows Phone應用程序
如上,我們可以借助第三方做事情
Windows Store 和Windows Phone 通訊協議需求
Transport Windows Store/
.NETWindows Store/
JavaScriptWindows Phone/
IEWindows Phone/
.NETWebSockets N/A Win8+ 8+ N/A Forever Frame N/A Win8+ 7.5+ N/A Server-Sent Events Win8+ N/A N/A 8+ Long Polling Win8+ Win8+ 7.5+ 8+
參考地址:http://www.cnblogs.com/humble/p/3856357.html