<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:01:07
        文檔

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

        微信小程序websocket聊天室的實現示例代碼:背景 最近做了一個微信小程序的即時通訊功能,之前我也做過node.js的websocket服務,不過是在web端應用的socket.io服務。小程序本身對http、websocket等連接均有諸多限制,所以這次項目選擇了node.js自帶的ws模塊。 服務端 初始化一個node.js
        推薦度:
        導讀微信小程序websocket聊天室的實現示例代碼:背景 最近做了一個微信小程序的即時通訊功能,之前我也做過node.js的websocket服務,不過是在web端應用的socket.io服務。小程序本身對http、websocket等連接均有諸多限制,所以這次項目選擇了node.js自帶的ws模塊。 服務端 初始化一個node.js

        背景

        最近做了一個微信小程序的即時通訊功能,之前我也做過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服務就配置完成了。當然,問題遠遠不止這么簡單。要想在小程序中進行通信,還需要解決下面幾個問題。

        域名

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

        小程序請求地址只支持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)
         }
        }
        

        到這里,一個簡單的聊天室服務端配置就基本完成了。

        最終作品效果如下:

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        微信小程序websocket聊天室的實現示例代碼:背景 最近做了一個微信小程序的即時通訊功能,之前我也做過node.js的websocket服務,不過是在web端應用的socket.io服務。小程序本身對http、websocket等連接均有諸多限制,所以這次項目選擇了node.js自帶的ws模塊。 服務端 初始化一個node.js
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲人成网www| 蜜桃AV无码免费看永久| 亚洲人成77777在线播放网站不卡| 亚洲毛片av日韩av无码| 最近最好的中文字幕2019免费 | 免费三级毛片电影片| 成全高清在线观看免费| 人妻无码中文字幕免费视频蜜桃 | 91免费精品国自产拍在线不卡| 国产免费一区二区三区在线观看| 老湿机一区午夜精品免费福利| 亚洲国产亚洲片在线观看播放| 亚洲大尺度无码专区尤物| 亚洲人AV永久一区二区三区久久| 日本a级片免费看| 成人最新午夜免费视频| 国产曰批免费视频播放免费s| 免费A级毛片无码视频| 精品视频一区二区三区免费| 99在线视频免费观看| 久久高潮一级毛片免费| 一级一看免费完整版毛片| 特黄特色大片免费| 国产偷国产偷亚洲高清人| 日韩欧美亚洲国产精品字幕久久久| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲日产2021三区在线| 亚洲大香伊人蕉在人依线| 亚洲国产韩国一区二区| 亚洲精品无码久久毛片波多野吉衣 | 亚洲国产精品久久66| 亚洲av永久无码精品漫画| 亚洲成人动漫在线| 亚洲综合在线成人一区| 亚洲午夜精品在线| 久久亚洲精品国产精品婷婷| 精品亚洲456在线播放| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲AV成人无码久久WWW| 美女黄频a美女大全免费皮| 天堂亚洲免费视频|