即时通讯: 小程序使用云开发实现聊天功能(1对1)

时间:2024-02-21 11:22:06

之前做的两个项目都涉及到即时通讯功能,近期帮朋友开发小程序时也有这个需求,因为没有后端,所以决定使用云开发来实现通讯功能。

即时通讯的关键点在于即时,在之前的开发中我们可以通过websocket长连接来实现,云开发又怎样来完成这项功能呢?

通过查阅小程序官方文档,我们发现collection.watch()方法可以实现数据监听,官方说明为:

监听集合中符合查询条件的数据的更新事件。使用 watch 时,支持 where, orderBy, limit,不支持 field。

这样一来我们边可以通过wach方法监听指定聊天室的数据更新(将A B用户的聊天关系记录为一条聊天室数据,通过id进行唯一标识)

具体代码如下:

 1 // 监听数据变化
 2 let _db = db.collection(\'msgList\')
 3 _db 
 4   .where({id: this.data.id})
 5   .watch({
 6     // 成功回调
 7     onChange: function(snapshot) {
 8       let reviceMsg = snapshot.docChanges[0]
 9       if(reviceMsg.dataType == \'add\'){
10         console.log(reviceMsg.doc)
11         let talkData = that.data.talkData
12         talkData.push(reviceMsg.doc)
13         that.setData({
14           talkData: talkData
15         })
16       }
17     },
18     // 失败回调
19     onError: function(err) {
20       console.error(\'the watch closed because of error\', err)
21     }
22   })