加载中 ...
首页 > 新闻资讯 > 经验心得 正文

微信小程序websocketchat

2019-07-12 22:32:48 来源:沈阳小程序开发 作者:沈阳软件开发

我最近做了一个微信小程序即时通讯功能。我之前也做过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实例方法以实现套接字侦听和信息发布。在下面粘贴一个简单的例子:

Wss.on('connection',函数连接(ws,req){console.log('connection open')//发生错误ws.on('error',函数错误(错误){console.log('error ',error);}); //断开ws.on('close',函数close(close){console.log('closed');}); ws.on('message',function message(Message) {ws.send('客户端发送消息')}); //发送消息ws.send('connection is enabled'); ws.send(id +'connected')});复制代码

通过这种方式,配置了简单的websocket服务。当然,问题远不止那么简单。为了在小程序中进行通信,需要解决以下问题。

域名

关于小程序服务器域名配置,下面提到的小程序开发文档

100427fe11gojt4w47t8bk.jpg

小程序请求地址仅支持https或wss协议,因此首先要配置的是SSL证书。获取SSL证书后,在服务器上执行https配置。

var fs=require('fs'); const options={key: fs.readFileSync('xxxxxxxxxxxxxxxxxxxx沈阳软件定制

ad.jpg

xxxxxxxxxxxxxxx','utf8'),//证书地址证书: 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对象的客户机是一个存储着所有插座连接对象的数组,每条连接对象都可以调用各自的发送方法发送信息。

在此基础上,我们可以进行一定的封装,用一个唯一的标识符映射到每一条插座连接,这样我们需要向特定的某个连接发送信息时,就可以找到该连接。

XX

您可以使用连接的URL作为唯一标识符:

设sockets={} wss.on('connection',function connection(ws,req){let id=req.url.slice(5); //根据实际获得的url截断几个字符串以查看套接字[ Id]=ws; ws.send(id +'connected');复制代码

每次客户端连接时,都会使用唯一ID来拼接网址。服务器获取req.url并截取字符串以获取唯一ID,并将连接对象存储在全局套接字下以供需要时使用。

在此基础上,您可以继续封装诸如加入房间,离开房间,在房间内通信,私下与特定用户聊天等功能,并且通常封装发送方法。值得注意的是send方法只能发送字符串,json对象需要转换为字符串然后传递给send。

以下是私人聊天的示例:

Wss.notice=function notice(id,data,ws){//将try {ws.send('sending .')发送到指定的id var notice=JSON.stringify({type:'notice',data:数据})让target=sockets [id] if(target){target.send('收到一条新消息')target.send(notice)} else {ws.send('target channel is off')}} catch(错误){console.log(错误)}}复制代码

此时,简单的聊天室服务器配置基本完成。

100431xfcz1ryz9w9wdw4y.gif

具体代码详情请观众转到微信小程序聊天室服务器和客户端配置示例^。^

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。