【发布时间】:2018-06-03 03:26:48
【问题描述】:
在 Flutter 中,我想监听 websocket 断开连接事件,如何实现呢? 应用程序进入后台时websocket连接将被丢弃,我仍然没有找到让它在后台继续运行的方法(有人有解决方案吗?),所以我必须检测websocket连接是否丢失什么的,这样我可以在失去连接时重新连接。 如果有人知道如何实现,请提供帮助。
【问题讨论】:
在 Flutter 中,我想监听 websocket 断开连接事件,如何实现呢? 应用程序进入后台时websocket连接将被丢弃,我仍然没有找到让它在后台继续运行的方法(有人有解决方案吗?),所以我必须检测websocket连接是否丢失什么的,这样我可以在失去连接时重新连接。 如果有人知道如何实现,请提供帮助。
【问题讨论】:
你可以通过实现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');
},
);
希望对您有所帮助。
【讨论】:
围绕 SO 和网络的其他答案表明您不能只在后台保持套接字打开(这似乎是合理的,您会保持打开的网络连接可能会影响电池寿命)。根据您的用例,您可能会更好地查看推送通知或按计划检查的内容。
【讨论】:
如果您的服务器关闭连接,只需像这样使用 pinginterval
ws.pingInterval = const Duration(seconds: 5);
onDone 应该被调用。
基本的乒乓球就足够了。
【讨论】: