麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 小程序 > 正文

微信小程序websocket聊天室的實現示例代碼

2020-03-21 16:02:15
字體:
來源:轉載
供稿:網友

背景

最近做了一個微信小程序的即時通訊功能,之前我也做過node.js的websocket服務,不過是在web端應用的socket.io服務。小程序本身對http、websocket等連接均有諸多限制,所以這次項目選擇了node.js自帶的ws模塊。

服務端

初始化一個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服務就配置完成了。當然,問題遠遠不止這么簡單。要想在小程序中進行通信,還需要解決下面幾個問題。

域名

關于小程序服務端域名配置,小程序開發文檔中如下提到

微信小程序,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,聊天室,代碼

部分代碼細節,請觀眾老爺們移步 微信小程序中聊天室的服務端和客戶端配置示例 ^.^

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久国产精品小视频 | 综合图区亚洲 | 国产精品久久久乱弄 | 九九热免费精品 | 男男羞羞视频网站国产 | 欧美亚洲一区二区三区四区 | 欧美成a人片在线观看久 | 欧美爱爱一区二区 | 成人男女激情免费视频 | 激情久久免费视频 | 九九热九九| 久久凹凸 | 在线观看视频亚洲 | 久久精品视频网址 | 亚洲影视在线观看 | 91精品国产综合久久婷婷香蕉 | 亚洲第一成网站 | 欧美一级毛片欧美一级成人毛片 | 特级无码毛片免费视频尤物 | 欧美精品色精品一区二区三区 | 亚洲一级片在线观看 | 国产免费一区二区三区视频 | 得得啪在线视频 | 国产成人高清在线 | 欧美亚洲另类在线 | 成人午夜一区二区 | 91中文在线| 成人免费乱码大片a毛片视频网站 | 禁漫天堂久久久久久久久久 | 87成人免费看片 | 成人午夜a | 国产一区二区成人在线 | 久久久久久久久久久久久久av | 91成人免费看 | 国产精品亚洲激情 | 色婷婷a v| 欧美成人一级 | a黄在线观看 | 在线成人精品视频 | 亚洲人成综合第一网 | 成人免费看片a |