Flutter WebSocket断开侦听

x6yk4ghg  于 2023-01-26  发布在  Flutter
关注(0)|答案(4)|浏览(328)

在Flutter中,我想听到WebSocket断开事件,如何实现?websocket连接将在应用程序进入后台时断开,我仍然没有找到一个方法让它继续在后台运行(有人有解决方案吗?),所以我必须检测是否websocket连接丢失或什么,以便我可以在连接丢失时重新连接。如果有人知道如何实现,请帮助。

xdyibdwo

xdyibdwo1#

通过实现onDone回调可以了解websocket是否关闭,如下图所示:

_channel = IOWebSocketChannel.connect(
        'ws://yourserver.com:port',
      );

      ///
      /// Start listening to new notifications / messages
      ///
      _channel.stream.listen(
        (dynamic message) {
          debugPrint('message $message');
        },
        onDone: () {
          debugPrint('ws channel closed');
        },
        onError: (error) {
          debugPrint('ws error $error');
        },
      );

希望能有所帮助。

nuypyhwy

nuypyhwy2#

如果您的服务器关闭了连接,只需使用pinginterval,如下所示

ws.pingInterval = const Duration(seconds: 5);

应调用onDone。
基本的乒乓球就够了。

vohkndzv

vohkndzv3#

关于SO和网络的其他答案表明,你不能只在后台保持套接字打开(这似乎是合理的,你会保持打开的网络连接,这可能会影响电池寿命)。根据你的用例,你可能会更好地查看推送通知或其他检查时间表的东西。

zpjtge22

zpjtge224#

WebSocketChannel channel = WebSocketChannel.connect(uri );
    Stream stream = channel.stream;
    stream.listen((event) {
      print('Event from Stream: $event');
      
    },onError: (e){
      
      Future.delayed(Duration(seconds: 10)).then((value) {
        connectAndListen();
      },);
      
    },
    onDone: (() {
    
      Future.delayed(Duration(seconds: 10)).then((value) {
        connectAndListen();
      },);
    })
    );

相关问题