从Http它被连接到WebSocket
http://blog.csdn.net/fenglibing/article/details/7100222
2、WEBclient與服務端信息交互的幾種方式
1)、Flash XMLSocket入門演示樣例:http://en.wikipedia.org/wiki/XMLSocket
不足:
a)、client必須安裝 Flash 播放器;
b)、由于 XMLSocket 沒有 HTTP 隧道功能,XMLSocket 類不能自己主動穿過防火墻;
c)、由于是使用套接口,須要設置一個通信port,防火墻、代理server也可能對非 HTTP 通道port進行限制;
不足:
a)、須要安裝Java的插件。
b)、有些瀏覽器執行于如Apple iOS、Android等是不支持Applet的。
c)、軟件插件的安裝可能會受制于當前用戶的系統權限;
d)、受安全限制不可以正常執行;
e)、假設執行的Applet須要安裝新的JRE,那么此時用戶在看到Applet展示的時候會有等待的過程,這個可能會由于網絡或者代理導致失敗,使用戶不可以正常使用該功能;
f)、Applet標簽,必需要是支持跨瀏覽器的;
詳見:http://en.wikipedia.org/wiki/Java_applet#Disadvantages
a)、基于 AJAX 的長輪詢(long-polling)方式
演示樣例圖:
b)、基于 Iframe 及 htmlfile 的流(streaming)方式
演示樣例圖:
使用“htmlfile“的 ActiveX 組件,解決IE的載入顯示問題;
瀏覽器兼容性比較好。Google Talk是基于這樣的方式實現的;
還是存在從client往服務端發消息時,須要提交新的請求。
4)、HTML5中的WebSocket
3、WebSocket
1)、WebSocket介紹HTML5 Web Sockets規范定義了Web Sockets API,支持頁面使用Web Socket協議與遠程主機進行全雙工的通信。它引入了WebSocket接口而且定義了一個全雙工的通信通道,通過一個單一的套接字在Web上進行操作。
HTML5 Web Sockets以最小的開銷高效地提供了Web連接。相較于常常須要使用推送實時數據到client甚至通過維護兩個HTTP連接來模擬全雙工連接的舊的輪詢或長輪詢(Comet)來說。這就極大的降低了不必要的網絡流量與延遲。
要使用HTML5 Web Sockets從一個Webclient連接到一個遠程端點,你要創建一個新的WebSocket實例并為之提供一個URL來表示你想要連接到的遠程端點。
該規范定義了ws://以及wss://模式來分別表示WebSocket和安全WebSocket連接。一個WebSocket連接是在client與server之間HTTP協議的初始握手階段將其升級到Web Socket協議來建立的,其底層仍是TCP/IP連接。
WebSocket Hybi草案12的地址:http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-12,能夠以此為入口訪問其他的草案。
a)、server與client之間交換的標頭信息非常小,大概僅僅有2字節;
b)、client與server都能夠主動傳送數據給對方;
c)、不用頻率創建TCP請求及銷毀請求,降低網絡帶寬資源的占用。同一時候也節省server資源。
a)、草案版本號00到草案版本號05之間。具體能夠查看草案文檔,解碼編碼能夠看見Netty的WebSocketFrameDecoder和WebSocketFrameEncoder實現;
b)、草案版本號06到如今最新的草案17。介紹參見文章:http://blog.csdn.net/fenglibing/article/details/6852497
a)、無安全key、最老的WebSocket握手協議的實現(Flash)。
b)、帶兩個安全key請求頭的后端握手實現;
c)、帶一個安全key請求頭的后端握手實現。
參見:http://blog.csdn.net/fenglibing/article/details/7100070
WebSocket使用標準的80及443port,這兩個都是防火墻友好協議,Web Sockets使用HTTP Upgrade機制升級到Web Socket協議。HTML5 Web Sockets有著兼容HTTP的握手機制,因此HTTPserver能夠與WebSocketserver共享默認的HTTP與HTTPS端(80和443)。
代理server的問題:
a)、HTTP代理server可能會選擇關閉流或閑置的WebSocket連接,由于它們看起好像是嘗試連接一個沒有回應的HTTPserver;
b)、代理server可能會緩沖未加密的HTTP響應。這將會對HTTP響應流帶來不可預計的延遲;
c)、未加密的WebSocket連接(ws://開頭的請求)server時。假設中間存在透明代理server,連接可能會失敗,或者發送消息會失敗。而加密的WebSocket連接在存在透明代理server的情況下成功的機率會比較大。
關于代理具體參見:http://www.infoq.com/cn/articles/Web-Sockets-Proxy-Servers
7)、使用演示樣例展示
WebSocket經由瀏覽器本身實現后,在Web端的實現就很的簡單,僅僅須要簡單初使化一個WebSocket組件,而且添加onopen、onmessage、onclose等事件的處理就可以,下面是一個用于初使化WebSocket連接(WEB端JS實現)的源代碼截圖展示:
這一個截圖展示的在不支持WebSocket的瀏覽器,使用Comet針對不同的瀏覽器進行的組件初使化處理操作:
以下這個圖展示的是使用WebSocket與不使用WebSocket發送消息的代碼及邏輯差異,當中畫紅線的部份為使用WebSocket發送消息的實現,僅僅有一行代碼。而余下的代碼。則是針對不支持WebSocket瀏覽器發送消息的代碼
本文來源于:平立彬的博客
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的从Http它被连接到WebSocket的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UITableView中cell的圆角(
- 下一篇: 补第一阶段冲刺站立会议1(应发表日期5月