socket.on 在颤振中无法正常工作

发布于 2025-01-09 21:41:53 字数 1144 浏览 0 评论 0原文

我创建一个类来管理套接字并在 main.dart 类中使用它。

class SocketServices {
  static late Socket socket;

  static void connect() async {
    socket = io(
        'http://server-address',
        OptionBuilder()
            .setTransports(['websocket'])
            .disableAutoConnect()
            .build());
    socket.connect();
  }

  static void disConnect() {
    socket.disconnect()
      ..dispose()
      ..close();
  }
}

连接正确。当我在其中一个页面中使用此套接字来侦听事件时,它无法连接:

@override
void onInit() {
  super.onInit();
  SocketServices.socket.on("online_players",(data) {
    print(data.toString());
  });
}

但是,当我在 SocketServices 的连接方法中使用 socket.on 时类,它正确返回数据。

static void connect() async {
  socket = io(
      'http://45.147.160.146:5000',
      OptionBuilder()
          .setTransports(['websocket'])
          .disableAutoConnect()
          .build());
  socket.connect();
  socket.on("online_users", (data){
    print(data);
  });
}

有什么区别?我需要其中一个页面上的数据,如何在 SocketServices 类中声明 socket.on 并使用该页面上的实时数据?

I create a class to manage socket and use it in the main.dart class.

class SocketServices {
  static late Socket socket;

  static void connect() async {
    socket = io(
        'http://server-address',
        OptionBuilder()
            .setTransports(['websocket'])
            .disableAutoConnect()
            .build());
    socket.connect();
  }

  static void disConnect() {
    socket.disconnect()
      ..dispose()
      ..close();
  }
}

It connects correctly. When I use this socket in one of the pages to listen to an event, it doesn't connect:

@override
void onInit() {
  super.onInit();
  SocketServices.socket.on("online_players",(data) {
    print(data.toString());
  });
}

But, when I use socket.on in the connecting method of SocketServices class, it returns data correctly.

static void connect() async {
  socket = io(
      'http://45.147.160.146:5000',
      OptionBuilder()
          .setTransports(['websocket'])
          .disableAutoConnect()
          .build());
  socket.connect();
  socket.on("online_users", (data){
    print(data);
  });
}

What difference? I need that data on one of the pages, How can I declare socket.on in SocketServices class and use live data on that page?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文