91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在微信小程序中實現一個websocket聊天室

發布時間:2021-04-14 17:57:34 來源:億速云 閱讀:255 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關怎么在微信小程序中實現一個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服務就配置完成了。當然,問題遠遠不止這么簡單。要想在小程序中進行通信,還需要解決下面幾個問題。

域名

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

怎么在微信小程序中實現一個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聊天室,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锦屏县| 孟津县| 科技| 天津市| 偏关县| 张家口市| 海原县| 贵定县| 无棣县| 富锦市| 建水县| 长沙县| 临猗县| 玉门市| 河北区| 丰县| 湘西| 海林市| 内江市| 凤翔县| 辽源市| 江北区| 通江县| 广东省| 惠东县| 揭东县| 永州市| 周宁县| 福建省| 淮安市| 巩留县| 廊坊市| 庆阳市| 金平| 平江县| 达拉特旗| 嘉义县| 新密市| 喀喇沁旗| 彭山县| 东丽区|