Websocket
簡介
WebSocket一種在單個 TCP 連線上進行全雙工通訊的協定
以前必須要用Ajax間隔時間去跟server要資料,websocket則可以在建立連線後持續傳送
簡單的比喻:
Ajax 喝水要拿起水杯,喝完要再放下
Websocket 用吸管喝水,要喝時或喝太多要退回去杯子都不必再次拿起水杯webSocket相關框架
ws
https://github.com/websockets/ws
server.js
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 3002 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});client.js
client with server
廣播範例:
讓同個房間接受廣播
其他相關框架
engine.io
這裡我們使用socket.io當教學範例
socket.io
之後新增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
Socket.io 模組之安全機制
client端
server端
另外client端的cookie會在websocket連線時自動送到server
ws 模組之安全機制驗證
https://github.com/websockets/ws#client-authentication
注意事項
ngrok
記得要用 https url
Last updated
Was this helpful?