【问题标题】:Flutter websocket disconnect listeningFlutter websocket断开监听
【发布时间】:2018-06-03 03:26:48
【问题描述】:

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

【问题讨论】:

    标签: websocket dart flutter


    【解决方案1】:

    你可以通过实现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');
            },
          );
    
    

    希望对您有所帮助。

    【讨论】:

    • 对不起,如果我没听懂。但是你是如何重新连接的,在你刚刚打印的 onDone() 方法中。
    • 其实它会自动重新连接。上面代码的重点是让你可以根据事件采取一些行动。
    【解决方案2】:

    围绕 SO 和网络的其他答案表明您不能只在后台保持套接字打开(这似乎是合理的,您会保持打开的网络连接可能会影响电池寿命)。根据您的用例,您可能会更好地查看推送通知或按计划检查的内容。

    【讨论】:

    • 您好,感谢您的帮助。那么你知道如何在 Flutter 上检测 websocket 是否正在运行吗?
    【解决方案3】:

    如果您的服务器关闭连接,只需像这样使用 pinginterval

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

    onDone 应该被调用。

    基本的乒乓球就足够了。

    【讨论】:

      猜你喜欢
      • 2018-11-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2021-06-04
      • 2016-05-05
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多