最近小程序涉及到关于多页面长连接的操作,踩了不少坑。现记录下来。

小程序的长连接非常搞笑,当你在连接状态时,再去连接此长连接,这时会发生长连接关闭的状态,所以一定要确保在长连接连接状态时,一定不要再次连接,否则会导致长连接关闭从而接收不到后台发来的任何信息。因此,在多页面同时用到长连接的状况下,最好将连接写在app.js中,以确保万无一失。接下来放代码:




reactnative 监控手势退出 react监听页面关闭_reactnative 监控手势退出


小程序存在一个问题:页面退出(右上角退出或者息屏)后(大约5秒),其实你的小程序已经处于休眠状态,说白了就是你小程序里的任何代码都不会执行,服务器会认为你APP处于断线状态,会直接closesocket。

因此为了解决小程序息屏的问题,最好将长连接函数放在onShow中,以确保当小程序页面打开时,如果长连接未连接,则会重新进行连接。在onHide中断开连接。(在过程中还发现一个问题,就是当小程序页面吊起扫码时,会触发onHide函数,因此关闭连接,但关闭扫码后又会重新进行连接,因此并不存在问题)

接下来说监听消息,可以根据返回消息类型的不同分别派发到各个页面,app.js中派发函数如上图。子页面函数如下图:


reactnative 监控手势退出 react监听页面关闭_ide_02


又发现一个问题,因为小程序中涉及到支付,所以当支付完成时跳转到微信自带的支付成功页面,这时触发了onHide函数,导致长连接断开,但此时后台已经有消息发过来,因此接收不到,等点击完成跳到自己的小程序后,长连接继续打开。(解决方法还在商讨中。。。等更新)

新增解决方法:1)最优解则是由后台加上消息池队列,当发送消息时,判断长连接是否为打开状态,是则推送,否则等待长连接连接上再推送;

2)或者加上个延时,当5秒内没收到推送消息,则轮询请求后台是否成功。

嗯。。应该也就这些了!!!