怎么在微信小程序中实现一个websocket聊天室
本篇文章给大家分享的是有关怎么在微信小程序中实现一个websocket聊天室,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
初始化一个node.js项目,引入ws模块
constwebSocket=require('ws');创建websocket实例,并设置监听端口
constwss=newwebSocket.Server({
port:3001
});定义wss实例方法,实现socket监听和信息发布。下面贴上简单的示例:
wss.on('connection',functionconnection(ws,req){
console.log('连接开启')
//发生错误
ws.on('error',functionerror(error){
console.log('error',error);
});
//断开连接
ws.on('close',functionclose(close){
console.log('已关闭');
});
ws.on('message',functionmessage(message){
ws.send('客户端发来了一条消息')
});
//发送消息
ws.send('连接已开启');
ws.send(id+'已连接')
});这样,一个简单的websocket服务就配置完成了。当然,问题远远不止这么简单。要想在小程序中进行通信,还需要解决下面几个问题。
域名
关于小程序服务端域名配置,小程序开发文档中如下提到
小程序请求地址只支持https或者wss协议,因此首先要配置的就是SSL证书。拿到SSL证书之后,在服务端做一下https的配置即可。
varfs=require('fs');
constoptions={
key:fs.readFileSync('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','utf8'),//证书地址
cert:fs.readFileSync('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','utf8'),//证书地址
};
varhttps=require('https');
varserver=https.createServer(options,app);另外值得注意的是,websocket监听的端口号需要做一下代理,因为小程序如果不配置端口号时,所有请求的url都不可以带端口号。
多房间通信
先看一下广播的实现:
//广播方法
wss.broadcast=functionbroadcast(data){
wss.clients.forEach(functioneach(client){
client.send(data)
});
};wss对象的clients是一个存储着所有socket连接对象的数组,每条连接对象都可以调用各自的send方法发送信息。
在此基础上,我们可以进行一定的封装,用一个唯一的标识符映射到每一条socket连接,这样我们需要向特定的某个连接发送信息时,就可以找到该连接。
可以通过连接的url作为唯一标识:
letsockets={}
wss.on('connection',functionconnection(ws,req){
letid=req.url.slice(5);//截几位字符串根据自己实际获得的url来看
sockets[id]=ws;
ws.send(id+'已连接');
...客户端每次连接时url后拼接一个唯一id,在服务端获取req.url并截取字符串拿到唯一id,并将该连接对象存储在全局的sockets下以便需要时使用。
在此基础上,可以继续封装诸如加入房间、离开房间、房间内通信、向特定用户私聊等功能,总体来说是对send方法的封装。值得注意的是send方法只能发送字符串,json对象需要转化成字符串再传入send。
下面是一个私聊的示例:
wss.notice=functionnotice(id,data,ws){
//向指定id发送
try{
ws.send('正在发送...')
varnotice=JSON.stringify({
type:'notice',
data:data
})
lettarget=sockets[id]
if(target){
target.send('收到一条新消息')
target.send(notice)
}else{
ws.send('目标信道已关闭')
}
}catch(err){
console.log(err)
}
}以上就是怎么在微信小程序中实现一个websocket聊天室,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。
推荐阅读
-
微信小程序能做什么什么是微信小程序
微信是目前用户数最多的应用,过去人们初次见面,都免不了要互相发名片、留电话,现在则变成了加微信好友。打开你的微信,用手按住页面向下...
-
小程序在哪里找(小程序开发一个多少钱啊)
微信里面的小程序,几乎可以代替手机App,不用安装就能使用,超方便!今天就给大家推荐5个宝藏级的微信小程序,实用又免费,真是让你爱...
-
小程序和h5的区别有哪些快速收藏
关于小程序与H5,在之前实际上是存在很多争议的,很多人觉得他们是一样的应用,但其实并不是这样的,差别还是非常大的,因为一个是网页,...
-
小程序怎么开发调用微信支付及微信回调地址
小程序怎么开发调用微信支付及微信回调地址本篇内容主要讲解“小程序怎...
-
小程序列表懒加载如何实现
小程序列表懒加载如何实现本文小编为大家详细介绍“小程序列表懒加载如...
-
小程序怎么与后端Java接口交互实现HelloWorld
小程序怎么与后端Java接口交互实现HelloWorld本篇内容主...
-
小程序分销系统开发常见的功能有哪些
小程序分销系统开发常见的功能有哪些这篇文章主要介绍“小程序分销系统...
-
茶叶小程序开发需要哪些功能
茶叶小程序开发需要哪些功能本篇内容介绍了“茶叶小程序开发需要哪些功...
-
健身行业小程序开发功能及好处有哪些
健身行业小程序开发功能及好处有哪些这篇文章主要讲解了“健身行业小程...
-
直播小程序开发需要哪些功能
直播小程序开发需要哪些功能本篇内容主要讲解“直播小程序开发需要哪些...
