<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
        主站蜘蛛池模板: 九九九国产精品成人免费视频| 亚洲精品乱码久久久久久V | 日本无卡码免费一区二区三区| 亚洲va精品中文字幕| 美女视频黄a视频全免费| 亚洲中字慕日产2021| 日韩精品无码区免费专区| 国产人成亚洲第一网站在线播放| 成年私人影院免费视频网站| 亚洲精华国产精华精华液网站| 国产又长又粗又爽免费视频 | 亚洲熟妇无码AV| 国产成人无码a区在线观看视频免费| 亚洲熟女www一区二区三区| 国产成人在线免费观看| 日本黄页网址在线看免费不卡| 中文亚洲成a人片在线观看| 国产免费拔擦拔擦8X高清在线人 | 国产成人精品日本亚洲18图| 成人免费看吃奶视频网站| 三级片免费观看久久| 亚洲动漫精品无码av天堂| 五月婷婷在线免费观看| 国产综合成人亚洲区| 亚洲精品国产品国语在线| 免费观看美女用震蛋喷水的视频| 亚洲欧洲av综合色无码| 国产aⅴ无码专区亚洲av麻豆| 84pao国产成视频免费播放| 亚洲国产欧美国产综合一区 | 亚洲视频免费一区| 免费无遮挡无码视频网站| 香蕉免费一级视频在线观看| 亚洲成a人片在线观看播放| 男女啪啪永久免费观看网站| 国产免费一区二区三区免费视频| 亚洲精品在线播放视频| 免费一级毛片不卡在线播放 | 免费毛片在线视频| 免费一区二区三区| 亚洲av无码偷拍在线观看|