最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序websocket聊天室的實現(xiàn)示例代碼

 更新時間:2019年02月12日 14:30:43   作者:極楽  
這篇文章主要介紹了微信小程序websocket聊天室的實現(xiàn)示例代碼,小程序本身對http、websocket等連接均有諸多限制,所以這次項目選擇了node.js自帶的ws模塊。感興趣的可以參考一下

背景

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

服務端

初始化一個node.js項目,引入ws模塊

const webSocket = require('ws');

創(chuàng)建websocket實例,并設置監(jiān)聽端口

const wss = new webSocket.Server({
  port: 3001
});

定義wss實例方法,實現(xiàn)socket監(jiān)聽和信息發(fā)布。下面貼上簡單的示例:

wss.on('connection', function connection(ws, req) {
  console.log('連接開啟')
  
  //發(fā)生錯誤
  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('客戶端發(fā)來了一條消息')
  });

  //發(fā)送消息
  ws.send('連接已開啟');
  ws.send(id + '已連接')
});

這樣,一個簡單的websocket服務就配置完成了。當然,問題遠遠不止這么簡單。要想在小程序中進行通信,還需要解決下面幾個問題。

域名

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

小程序請求地址只支持https或者wss協(xié)議,因此首先要配置的就是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監(jiān)聽的端口號需要做一下代理,因為小程序如果不配置端口號時,所有請求的url都不可以帶端口號。

多房間通信

先看一下廣播的實現(xiàn):

//廣播方法
wss.broadcast = function broadcast(data) {
  wss.clients.forEach(function each(client) {
    client.send(data)
  });
};

wss對象的clients是一個存儲著所有socket連接對象的數(shù)組,每條連接對象都可以調用各自的send方法發(fā)送信息。

在此基礎上,我們可以進行一定的封裝,用一個唯一的標識符映射到每一條socket連接,這樣我們需要向特定的某個連接發(fā)送信息時,就可以找到該連接。

可以通過連接的url作為唯一標識:

 let sockets = {}
 wss.on('connection', function connection(ws, req) {
    let id = req.url.slice(5);//截幾位字符串根據(jù)自己實際獲得的url來看
    sockets[id] = ws;
    ws.send(id + '已連接');
    ...

客戶端每次連接時url后拼接一個唯一id,在服務端獲取req.url并截取字符串拿到唯一id,并將該連接對象存儲在全局的sockets下以便需要時使用。

在此基礎上,可以繼續(xù)封裝諸如加入房間、離開房間、房間內通信、向特定用戶私聊等功能,總體來說是對send方法的封裝。值得注意的是send方法只能發(fā)送字符串,json對象需要轉化成字符串再傳入send。

下面是一個私聊的示例:

wss.notice = function notice(id, data, ws) {
  // 向指定id發(fā)送
  try {
    ws.send('正在發(fā)送...')
    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)
  }
}

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

最終作品效果如下:

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

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

相關文章

  • 關于uniapp微信小程序左上角返回按鈕的監(jiān)聽詳解

    關于uniapp微信小程序左上角返回按鈕的監(jiān)聽詳解

    uniapp是一個支持多端的技術,因此它是兼容性比較強的,而且速度也很快,下面這篇文章主要給大家介紹了關于uniapp微信小程序左上角返回按鈕監(jiān)聽的相關資料,需要的朋友可以參考下
    2022-04-04
  • 微信小程序npm引入vant-weapp的踩坑記錄

    微信小程序npm引入vant-weapp的踩坑記錄

    這篇文章主要給大家介紹了關于微信小程序npm引入vant-weapp的踩坑記錄,文中通過示例代碼介紹的非常詳細,對大家學習或者使用微信小程序具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • js判斷undefined類型示例代碼

    js判斷undefined類型示例代碼

    這篇文章主要介紹了js判斷undefined類型的實現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • [HTML/CSS/Javascript]WWTJS

    [HTML/CSS/Javascript]WWTJS

    [HTML/CSS/Javascript]WWTJS...
    2007-09-09
  • js定義類的方法示例【ES5與ES6】

    js定義類的方法示例【ES5與ES6】

    這篇文章主要介紹了js定義類的方法,結合實例形式分析了javascript ES5與ES6標準下類的定義方法,需要的朋友可以參考下
    2019-07-07
  • 帶你搞懂js的深拷貝

    帶你搞懂js的深拷貝

    這篇文章主要為大家介紹了js的深拷貝,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 正則表達式在js前端的15個使用場景梳理總結

    正則表達式在js前端的15個使用場景梳理總結

    本篇帶來15個正則使用場景,按需索取,收藏恒等于學會??!有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 原生js實現(xiàn)隨機點餐效果

    原生js實現(xiàn)隨機點餐效果

    一款十分簡單的原生js實現(xiàn)的隨機點菜代碼,點擊點菜按鈕隨機點取上面菜單的菜品,可根據(jù)需求改成自己需要功能,比如說隨機點名。感興趣的朋友來參考實現(xiàn)代碼吧
    2019-12-12
  • JS錯誤處理與調試操作實例分析

    JS錯誤處理與調試操作實例分析

    這篇文章主要介紹了JS錯誤處理與調試操作,結合實例形式分析了JavaScript錯誤捕獲、處理、調試工具、斷點調試等相關操作技巧,需要的朋友可以參考下
    2020-04-04
  • JS實現(xiàn)刷新父頁面不彈出提示框的方法

    JS實現(xiàn)刷新父頁面不彈出提示框的方法

    這篇文章主要介紹了JS實現(xiàn)刷新父頁面不彈出提示框的方法,實例分析了javascript子窗口的打開以及子窗口與父窗口的交互操作技巧,需要的朋友可以參考下
    2016-06-06

最新評論

桦甸市| 尖扎县| 濮阳市| 竹北市| 凤冈县| 延寿县| 新兴县| 莎车县| 灵宝市| 得荣县| 平远县| 罗城| 壶关县| 交口县| 伊宁市| 任丘市| 柏乡县| 鹤壁市| 阳城县| 建湖县| 文登市| 洮南市| 会宁县| 保德县| 无棣县| 宜宾县| 道孚县| 云浮市| 许昌市| 天柱县| 周至县| 东莞市| 常州市| 池州市| 古田县| 保定市| 黎川县| 岳阳县| 瑞丽市| 临沭县| 河南省|