您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關怎么在微信小程序中實現一個websocket聊天室,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
初始化一個node.js項目,引入ws模塊
const webSocket = require('ws');
創建websocket實例,并設置監聽端口
const wss = new webSocket.Server({ port: 3001 });
定義wss實例方法,實現socket監聽和信息發布。下面貼上簡單的示例:
wss.on('connection', function connection(ws, req) { console.log('連接開啟') //發生錯誤 ws.on('error', function error(error) { console.log('error', error); }); //斷開連接 ws.on('close', function close(close) { console.log( '已關閉'); }); ws.on('message', function message(message) { ws.send('客戶端發來了一條消息') }); //發送消息 ws.send('連接已開啟'); ws.send(id + '已連接') });
這樣,一個簡單的websocket服務就配置完成了。當然,問題遠遠不止這么簡單。要想在小程序中進行通信,還需要解決下面幾個問題。
域名
關于小程序服務端域名配置,小程序開發文檔中如下提到
小程序請求地址只支持https或者wss協議,因此首先要配置的就是SSL證書。拿到SSL證書之后,在服務端做一下https的配置即可。
var fs = require('fs'); const options = { key: fs.readFileSync('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'utf8'),//證書地址 cert: fs.readFileSync('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'utf8'),//證書地址 }; var https = require('https'); var server = https.createServer(options, app);
另外值得注意的是,websocket監聽的端口號需要做一下代理,因為小程序如果不配置端口號時,所有請求的url都不可以帶端口號。
多房間通信
先看一下廣播的實現:
//廣播方法 wss.broadcast = function broadcast(data) { wss.clients.forEach(function each(client) { client.send(data) }); };
wss對象的clients是一個存儲著所有socket連接對象的數組,每條連接對象都可以調用各自的send方法發送信息。
在此基礎上,我們可以進行一定的封裝,用一個唯一的標識符映射到每一條socket連接,這樣我們需要向特定的某個連接發送信息時,就可以找到該連接。
可以通過連接的url作為唯一標識:
let sockets = {} wss.on('connection', function connection(ws, req) { let id = req.url.slice(5);//截幾位字符串根據自己實際獲得的url來看 sockets[id] = ws; ws.send(id + '已連接'); ...
客戶端每次連接時url后拼接一個唯一id,在服務端獲取req.url并截取字符串拿到唯一id,并將該連接對象存儲在全局的sockets下以便需要時使用。
在此基礎上,可以繼續封裝諸如加入房間、離開房間、房間內通信、向特定用戶私聊等功能,總體來說是對send方法的封裝。值得注意的是send方法只能發送字符串,json對象需要轉化成字符串再傳入send。
下面是一個私聊的示例:
wss.notice = function notice(id, data, ws) { // 向指定id發送 try { ws.send('正在發送...') var notice = JSON.stringify({ type: 'notice', data: data }) let target = sockets[id] if (target) { target.send('收到一條新消息') target.send(notice) } else { ws.send('目標信道已關閉') } } catch (err) { console.log(err) } }
以上就是怎么在微信小程序中實現一個websocket聊天室,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。