在Flutter中,我想听到WebSocket断开事件,如何实现?websocket连接将在应用程序进入后台时断开,我仍然没有找到一个方法让它继续在后台运行(有人有解决方案吗?),所以我必须检测是否websocket连接丢失或什么,以便我可以在连接丢失时重新连接。如果有人知道如何实现,请帮助。
xdyibdwo1#
通过实现onDone回调可以了解websocket是否关闭,如下图所示:
onDone
_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'); }, );
希望能有所帮助。
nuypyhwy2#
如果您的服务器关闭了连接,只需使用pinginterval,如下所示
ws.pingInterval = const Duration(seconds: 5);
应调用onDone。基本的乒乓球就够了。
vohkndzv3#
关于SO和网络的其他答案表明,你不能只在后台保持套接字打开(这似乎是合理的,你会保持打开的网络连接,这可能会影响电池寿命)。根据你的用例,你可能会更好地查看推送通知或其他检查时间表的东西。
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(); },); }) );
4条答案
按热度按时间xdyibdwo1#
通过实现
onDone
回调可以了解websocket是否关闭,如下图所示:希望能有所帮助。
nuypyhwy2#
如果您的服务器关闭了连接,只需使用pinginterval,如下所示
应调用onDone。
基本的乒乓球就够了。
vohkndzv3#
关于SO和网络的其他答案表明,你不能只在后台保持套接字打开(这似乎是合理的,你会保持打开的网络连接,这可能会影响电池寿命)。根据你的用例,你可能会更好地查看推送通知或其他检查时间表的东西。
zpjtge224#