flutter webSocket 断线重连

分享
siman 2020-3-30 13:23:18 6813 1 来自河北



  1. ///onData:当从服务器接收到某些数据时调用的方法
  2.     ///onError:处理任何错误的方法
  3.     /// onDone:用于处理通信关闭的方法(例如,从Server)
  4.     ///cancelOnError:(默认为false)。如果设置为true,则在第一个错误事件发生时自动关闭StreamSubscription


  5.     future.then((WebSocket ws) {
  6.       _webSocket = ws;
  7.       _webSocket.readyState;
  8.       // 监听事件

  9.       _webSocket.listen((onData){
  10.         xintiao =true;


  11.         if (dingshiqiQd==false) {
  12.           print("==========");
  13.           xintiao =false;
  14.           dingshiqiQd = true;
  15.           Timer timer = new Timer(new Duration(seconds: 30), () {

  16.             //如果即时的时候 未来消息或者心跳 那么将认为是断线 关闭链接重连
  17.             //if(xintiao==false){
  18.               close(); //断开链接

  19.            // }


  20.             print("xintiaos==$xintiao");
  21.             print("dingshiqiQd==$dingshiqiQd");

  22.             dingshiqiQd=false;
  23.             print("dingshiqiQd==$dingshiqiQd");
  24.             print("object");
  25.             // 只在倒计时结束时回调
  26.           });
  27.         }

  28.         xintiao = true;

  29.         print("服务器端=="+onData);
  30.       },onError:(err){
  31.         print("服务器oee=="+err);
  32.       },


  33.           onDone: (){
  34.             //initWebScoket(); //重新链接
  35.             WebScoketManger().initWebScoket();
  36.             print("服务器服务器");
  37.           },cancelOnError: true
  38.       );

  39.     }).catchError((e) {
  40.       print("哈哈哈哈: $e");
  41.     })
  42.         .whenComplete((){
  43.       print("objec44t");
  44.     })

  45.     ;

  46.   }
复制代码


我采用的方式比较笨(藏宝库源码分享 官网28xin.com) 用定时器检测心跳 如果在定时器运行期间 收到服务器的心跳或者消息 那么认为线路良好,如果定时器运行结束了还是没有收到心跳或者消息说明已经断线 那么执行断开然后重新初始化 webSocket链接  如果你有更好的方法请交流一下!


您需要登录后才可以回帖 登录 | 立即注册
感谢分享
2022-8-4 21:48:12 回复

Powered by CangBaoKu v1.0 小黑屋 藏宝库It社区 ( 冀ICP备14008649号 )

GMT+8, 2024-5-16 19:14 , Processed in 0.165543 second(s), 35 queries . © 2003-2025 cbk Team.

快速回复 返回顶部 返回列表