(20)长连开发经验分享 https://developers.weixin.qq.com/community/develop/doc/0002a4fcfe4b00b104772017351409?highLine=%25E8%2587%25AA%25E5%25AE%259A%25E4%25B9%2589WebSocket


1、webSocket的生命周期一共有4个状态:connecting、open、closing、closed

image.png
注意:只有长连处在 open 状态,才能够正常的收发消息,其他状态均会报错。

2、小程序长连的断开机制

当小游戏进入到后台运行超过5秒时,客户端会禁止小游戏的所有网络连接。这是一个非常频繁的断线逻辑,十分考验程序断线错误处理逻辑。建议大家可以在用户点击右上角按钮退出小程序/小游戏时,主动帮用户断线,待用户切回时再重接上去。

当 webSocket 长连超过一段时间没有任何网络传输时,客户端会主动关闭这条长连,以节省资源。开发者可以设置业务心跳,每隔一段时间与后台进行一次通讯,维持长连。

3、心跳和重连机制

定时sendMsg,如果发送失败,可以根据socketTask.readyState和close.code 状态码选择性进行重连。

  1. /**
  2. * socketReadyState
  3. * 0:CONNECTING
  4. * 1:OPEN
  5. * 2:CLOSING
  6. * 3:CLOSED
  7. */
  8. /**
  9. *onClose
  10. */
  11. //小程序主动关闭
  12. if (code == 1000 && reason == "normal closure") {
  13. }
  14. // 小程序切换到后台,被微信杀掉,需要重连连接
  15. if (code == 1000 && reason == "interrupted") {
  16. }
  17. // 服务端拒绝连接
  18. if (code == 1001 && reason == "Stream end encountered") {
  19. }
  20. // 服务关闭
  21. if (code == 1006 && reason == "abnormal closure") {
  22. }