首页 > 解决方案 > Flutter 无法使用 Web Socket Channel 连接到 AWS

问题描述

我正在编写一个需要使用 Web Socket Channel 包连接到 Web 服务器的程序。我正在按照指南https://flutter.dev/docs/cookbook/networking/web-sockets连接到 AWS 服务器。链接是这样的:

wss://xxxxxxx.execute-api.ap-southeast-1.amazonaws.com/dev/

使用该包我能够连接并获得 connectionState.waiting,但我似乎无法收听来自服务器的任何数据,也无法向服务器发送数据。对于数据发送,格式如下:

Map message = {
      "action": 'subscribe',
      "channel": 'contentTest',
    };
channel.sink.add(jsonEncode(message));

我的其余代码与指南类似,但是服务器似乎没有收到任何数据,我的客户端也没有。任何人都可以分享上述问题的工作示例吗?先感谢您。

标签: amazon-web-servicesflutterwebsocket

解决方案


我有一个工作示例要分享,您可以看到连接是如何完成的以及消息是如何发送的,这个示例使用了 dart:io 中的 WebSocket 类。当我编写此代码时,我遇到了 Web Socket Channel 的一些问题,不记得为什么,所以我选择了 Dart WebSocket 类。

 Future<WatchResponse> WatchCollection(
      CollectionRequest collectionRequest, String token) async {
    try {
      WebSocket ws = await WebSocket.connect(
          "ws://${this.authority}/gapi/collection/watch?token=$token");
      if (ws.readyState == WebSocket.open) {
        ws.add(jsonEncode(collectionRequest.toMap()));
        return WatchResponse(ok: true, streamSubscription: ws.listen(null));
      }
    } on WebSocketException catch (err) {
      return WatchResponse(ok: false, webSocketExecption: err);
    }
    return WatchResponse(ok: false, webSocketExecption: null);
  }

推荐阅读