WebSocket 學習筆記(二)

HTML WebSocket

簡介

WebSocket 是一種自然的全雙工、雙向、單套接字鏈接。
本質上,WebSocket 和 HTML5 語義及簡單化範式融爲一體。他消除了複雜的變通方法需求以及延時,而且簡化了架構。

爲什麼需要 WebSocket

1.WebSocket 使實時通訊更有效
2.簡潔性
3.可互操作
4.WebSocket 解決了使 HTTP 不適合於實時通訊的主要不足之處。

WS 服務器實現及相關技術

在 WebSocket 協議 和 RFC 6455 規範下有很多不同版本的 ws 服務器實現。
WebSocket 初始握手 (opening handshake ) 都始於一個 HTTP 請求,包含一個特殊的首標——Upgrade,第一次握手時將 HTTP 協議升級到 WebSocket 協議完成,這一工作在相同的底層 TCP 連接上進行,我們來看一下 WebSocket 在建立連接時的請求和響應
Request:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Response:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

請求中會會包含一個 Upgrade 的首標和一個 base64 編碼的 Sec-WebSocket-Key 解碼後是 16 字節長度,這個 key 用於創建服務器握手,服務端需要將此值已字符串的形式拼接爲全局唯一( GUID ) 字符串進行 SHA-1 (160位) 編碼後再進行 base64 編碼作爲服務器握手返回 Accept。
細則參照 RFC 6455 規範

例如:Apache 的 ::mod_pywebsocket 、Jetty、Socket.IO::
kaazing 的 ::WebSocket GateWay:: ……

相關技術

  • SSE ( Server-Send Event )
  • SPDY ( Google Inc. )
  • WebRTC ( Web Real-Time Comm-unication ) 實時協作
  • RFB ( Remote Framebuffer ) over WebSocket 通過 WebSocket 啓用屏幕共享
  • XMPP、 STOMP、 JMS 等由於構建聊天室、多人在線遊戲

參考書籍

《HTML5 WebSocket 權威指南》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章