简体   繁体   English

flutter 监听本地nodejs的socket.io通道

[英]flutter listen to socket.io channel of local nodejs

I am trying to listen to socket.io public channel (created from nodejs local server).我正在尝试收听 socket.io 公共频道(从 nodejs 本地服务器创建)。

I am using android emulator for testing.我正在使用android模拟器进行测试。

Code snippet in main.dart: main.dart 中的代码片段:

import 'package:socket_io_client/socket_io_client.dart' as IO;

    IO.Socket socket = IO.io('http://10.0.2.2:3000');

        socket.on('connect', (_) {
         print('connect');
         socket.emit('msg', 'test');
        });
        socket.on('event', (data) => print(data));
        socket.on('disconnect', (_) => print('disconnect'));
        socket.on('fromServer', (_) => print(_));

This is the channel, I am trying to listen to:这是频道,我正在尝试收听:

global.io.emit('news', { hello: 'world' });

I tried adhara_socket_io.dart' and this package as well ( https://github.com/kakajansh/echo ), with no success.我也试过 adhara_socket_io.dart' 和这个包( https://github.com/kakajansh/echo ),但没有成功。

Appreciate your assistance.感谢您的帮助。

Update更新

I am trying to use instead this package ( https://github.com/infitio/flutter_socket_io/blob/master/example/lib/main.dart )我正在尝试使用这个包( https://github.com/infitio/flutter_socket_io/blob/master/example/lib/main.dart

const String uri = 'http://127.0.0.1:3000/';


class _MyHomePageState extends State<MyHomePage> {
  _MyHomePageState();
  
  List<String> toPrint = ["trying to connect"];
  SocketIOManager manager;
  Map<String, bool> _isProbablyConnected = {};
  Map<String, SocketIO> sockets = {};

  @override
  void initState() {
    super.initState();
    manager = SocketIOManager();
    initSocket("default");

  }

initSocket(String identifier) async {
    setState(() => _isProbablyConnected[identifier] = true);
    SocketIO socket = await manager.createInstance(SocketOptions(
      //Socket IO server URI
        uri,
        nameSpace: (identifier == "namespaced")?"/adhara":"/",
        //Query params - can be used for authentication
        query: {
          "auth": "--SOME AUTH STRING---",
          "info": "new connection from adhara-socketio",
          "timestamp": DateTime.now().toString()
        },
        //Enable or disable platform channel logging
        enableLogging: false,
        transports: [Transports.WEB_SOCKET/*, Transports.POLLING*/] //Enable required transport
    ));
    socket.onConnect((data) {
      pprint("connected...");
      pprint(data);
      sendMessage(identifier);
    });
     socket.on('news', (data){   // hera is where you receive from `serve`
      print("news");
      print(data);
    });
    socket.onConnectError(pprint);
    socket.onConnectTimeout(pprint);
    socket.onError(pprint);
    socket.onDisconnect(pprint);
    socket.on("type:string", (data) => pprint("type:string | $data"));
    socket.on("type:bool", (data) => pprint("type:bool | $data"));
    socket.on("type:number", (data) => pprint("type:number | $data"));
    socket.on("type:object", (data) => pprint("type:object | $data"));
    socket.on("type:list", (data) => pprint("type:list | $data"));
    socket.on("message", (data) => pprint(data));
    socket.connect();
    sockets[identifier] = socket;
  }
  sendMessage(identifier) {
    if (sockets[identifier] != null) {
      pprint("sending message from '$identifier'...");
      sockets[identifier].emit("message", [
        "Hello world!",
        1908,
        {
          "wonder": "Woman",
          "comics": ["DC", "Marvel"]
        },
        {
          "test": "=!./"
        },
        [
          "I'm glad",
          2019,
          {
            "come back": "Tony",
            "adhara means": ["base", "foundation"]
          },
          {
            "test": "=!./"
          },
        ]
      ]);
      pprint("Message emitted from '$identifier'...");
    }
  }

   bool isProbablyConnected(String identifier){
    return _isProbablyConnected[identifier]??false;
  }


pprint(data) {
    setState(() {
      if (data is Map) {
        data = json.encode(data);
      }
      print(data);
      toPrint.add(data);
    });
  }

However, I am getting below error:但是,我收到以下错误:

io.socket.engineio.client.EngineIOException: websocket error io.socket.engineio.client.EngineIOException: websocket 错误

Thanks,谢谢,

Configure android:usesCleartextTraffic="true" as a property of <application ...> tag in android/app/src/main/AndroidManifest.xml在 android/app/src/main/AndroidManifest.xml 中配置 android:usesCleartextTraffic="true" 作为 <application ...> 标签的属性

For example:例如:

<application
    android:name="io.flutter.app.FlutterApplication"
    android:label="adhara_socket_io_example"
    android:usesCleartextTraffic="true"
    android:icon="@mipmap/ic_launcher">
    <activity
        android:name=".MainActivity"...>...</activity>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM