uniapp之小程序websocket使用-服务端

转载一段,留作备忘

我的小程序很特殊的一个功能就是需要实时收发消息,类似QQ、微信这些实时聊天工具,但是功能没有那么齐全就是了。这涉及到了websocket的实现,小程序是自带websocket功能api的,可以连接、关闭以及监听长连接的各项事件。这一部分不讲后端实现,我后端是用node.js引用ws包实现的,当然,你需要把ws转为wss,这也很简单,只需要有一个ssl证书,ws包里有这样的方法。ws转wss方法如下:

在这里插入图片描述

具体详见github ws
微信小程序推荐创建websocket的方式是

var socketTask = uni.connectSocket({
url: 'wss://www.example.com/socket', //仅为示例,并非真实接口地址。
complete: ()=> {}
});



socketTask对象有自己的事件,一个小程序字多可以创建10个socketTask对象,也就是10个长连接。
这里主要想探讨对于一个多页面的小程序,如何让每个页面可以对websocket回传的信息做出相应,如何保持一个小程序只有一个长连接,在哪里写监听事件?
这里简单写一下思路,因为这部分可能会有挺多人想了解(自我感觉,因为困扰了我一段时间),今后会写一个专门的文章,可以关注下。
以下是思路:

在小程序的App.vue里的onlaunch里创建一个全局socketTask对象,(挂载在vue.property上的全局变量),之后在每个页面里直接用该socketTask对象的readyState判断连接的状态
创建一个全局函数,用来创建、监听socket,并在需要的地方直接引用,同样挂载在vue.property上
使用vuex,监听函数里收到消息,对于不同类型的消息,更新vuex的state,在需要的子页面中监听vuex的state。
注意不同页面的watch不会销毁,所以为了避免重复监听,最后用this.$watch()事件,页面hide的时候unwatch()来取消监听

原文链接:https://blog.csdn.net/lyandgh/article/details/97795498

你可能感兴趣的:(微信小程序,uniapp,小程序,websocket)