Socket.IO - 內部
在本章中,我們將討論使用Socket.IO,事件和訊息進行回退,連線。
回退
Socket.IO有很多底層傳輸機制,它處理由於跨瀏覽器問題,WebSocket實現,防火牆,埠阻塞等引起的各種約束。
儘管W3C已經為WebSocket API定義了規範,但它仍然缺乏實現。Socket.IO為我們提供了回退機制,可以處理這些問題。如果我們使用本機API開發應用程式,我們必須自己實現回退。Socket.IO按以下順序包含大量回退 -
- WebSockets
- FlashSocket
- XHR long polling
- XHR multipart streaming
- XHR polling
- JSONP polling
- iframes
使用 Socket.IO 連線
Socket.IO 連線以握手開始。這使握手成為協議的一個特殊部分。除握手外,協議中的所有其他事件和訊息都通過套接字傳輸。
Socket.IO 旨在與 Web 應用程式一起使用,因此假設這些應用程式始終能夠使用HTTP。正是由於這種推理,Socket.IO 握手通過握手 URI 上的 POST 請求(傳遞給connect方法)在HTTP上進行。
事件和訊息
WebSocket本機API僅傳送訊息。Socket.IO為這些訊息提供了一個附加層,允許我們建立事件,並通過分離傳送的不同型別的訊息再次幫助我們輕鬆地開發應用程式。
本機API僅以純文字形式傳送訊息。這也由Socket.IO負責。它為我們處理資料的序列化和反序列化。
我們有一個官方客戶端API用於網路。對於其他客戶端,如本機行動電話,其他應用程式客戶端,我們也可以使用Socket.IO使用以下步驟。
步驟1 - 需要使用上面討論的相同連線協議建立連線。
步驟2 - 訊息需要與Socket.IO指定的格式相同。此格式使Socket.IO能夠確定訊息的型別以及訊息中傳送的資料以及一些對操作有用的後設資料。
郵件格式為 -
[type] : [id ('+')] : [endpoint] (: [data]
上述命令中的引數說明如下 -
- type是單個數字整數,指定它是什麼型別的訊息。
- id是訊息ID,用於確認的增量整數。
- endpoint是要將訊息傳遞到的套接字端點…
- data是要傳遞到套接字的關聯資料。對於訊息,它被視為純文字,對於其他事件,它被視為JSON。
在下一章中,我們將在Socket.IO中編寫一個聊天應用程式。