1.Socket html
2.Socket and websocket(HTML5)android
3.SignalRgit
Signal 是微軟支持的一個運行在 Dot NET 平臺上的 html websocket 框架。它出現的主要目的是實現服務器主動推送(Push)消息到客戶端頁面,這樣客戶端就沒必要從新發送請求或使用輪詢技術來獲取消息。github
可訪問其官方網站:https://github.com/SignalR/ 獲取更多資訊。web
SignalR 的實現機制與 .NET WCF 或 Remoting 是類似的,都是使用遠程代理來實現。在具體使用上,有兩種不一樣目的的接口:PersistentConnection 和 Hubs,其中 PersistentConnection 是實現了長時間的 Javascript 輪詢(相似於 Comet),Hub 是用來解決實時信息交換問題,它是利用 Javascript 動態載入執行方法實現的。SignalR 將整個鏈接,信息交換過程封裝得很是漂亮,客戶端與服務器端所有使用 JSON 來交換數據。json
ASP.NET signalr對ASP.NET開發者來講是一個新的程序庫,它能讓咱們更加容易便捷地開發實時通訊功能;跨域
signalr容許客戶端和服務器之間雙向通訊。服務器能夠將內容推送到已鏈接的客戶端。瀏覽器
signalr支持Web Sockets,遇到其餘兼容舊的瀏覽器signalr會用其餘技術支持"雙向通訊"(不要較真)。服務器
signalr包括這些API:鏈接管理(例如,鏈接和斷開鏈接的事件)、對鏈接分組、和訪問功能受權。websocket
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決定使用具體哪一種通訊方式
創建一個通信方式須要必定的時間和客戶機/服務器資源。若是客戶機的功能是已知的,那麼通訊方式在客戶端鏈接開始的時候就能夠指定。下面的代碼片斷演示了使用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能在站點的配置頁面使用)
當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
SignalR可以在不少客戶端平臺下運行,本節描述了客戶端瀏覽器、桌面應用程序、Silverlight應用程序及手機設備在使用SignalR的需求。
1.瀏覽器
SignalR支持許多中種類的瀏覽器,尤爲是最近瀏覽器的兩個版本。
在瀏覽器中使用signalr的應用程序必須使用jQuery的版本>=1.6.4.
signalr可在如下瀏覽器中使用:
通信協議 | Internet Explorer |
Chrome (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,因此咱們可讓它運行得更強大,一下是官方給出的圖
通信協議 | .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應用程序
如上,咱們能夠藉助第三方作事情
Transport | Windows Store/ .NET |
Windows Store/ JavaScript |
Windows Phone/ IE |
Windows Phone/ .NET |
---|---|---|---|---|
WebSockets | 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+ |