WebSocket

Websocket

簡介

WebSocket一種在單個 TCP 連線上進行全雙工通訊的協定

以前必須要用Ajax間隔時間去跟server要資料,websocket則可以在建立連線後持續傳送

簡單的比喻:

Ajax 喝水要拿起水杯,喝完要再放下

Websocket 用吸管喝水,要喝時或喝太多要退回去杯子都不必再次拿起水杯

webSocket相關框架

ws https://github.com/websockets/ws

engine.io https://github.com/socketio/engine.io

uWebSockets https://github.com/uWebSockets/uWebSockets

這裡我們使用socket.io當教學範例

socket.io

npm install socket.io --save

之後新增server.js

index.html

之後啟動 node server.js

打開瀏覽器localhost:3000,並開啟開發人員工具的network觀察

以下取自維基百科https://zh.wikipedia.org/wiki/WebSocket

新增一個事件

server.js

index.html

可看到我們在client端的方框輸入文字後按送出,可於terminal中看到訊息

接著

剛才是讓server接收client發出的事件,現在試著讓client接收server發送的事件

server.js

記得更改完server.js後要記得把server重新啟動

index.html

注意:socket.broadcast.emit會傳給所有connected user除了自己

這時開啟第二個瀏覽器,並在文字框輸入後按送出,即可看到另一個瀏覽器產生文字

再複習一次,首先必須先再連線範圍作用域才可做事

server.js

client就是簡單使用on和emit

最基本兩種

分別是socket.on('事件名稱',cb)socket.emit('事件名稱',cb)

server和client都一樣的用法

socket.broadcast.emit('user connected');給所有連線人廣播

再來是房間部分

socket.join('房間名稱')讓client加入房間

socket.leave('房間名稱')讓client離開房間

socket.broadcast.to('房間名稱').emit('chat',{data: res});給特定房間廣播訊息

簡單範例

server.js

index.html

安全機制之token

client端

server端

另外client端的cookie會在websocket連線時自動送到server

Last updated

Was this helpful?