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?