首页 > 解决方案 > Flutter中真实设备和socket.io的问题

问题描述

当我尝试在物理设备中以调试模式运行我的应用程序时,我遇到了这个问题。当我尝试调试下一个代码时:

class SocketService with ChangeNotifier {
  ServerStatus _serverStatus = ServerStatus.Connecting;
  SocketService() {
    this._initConfig();
  }
  void _initConfig() async {
    IO.Socket socket = IO.io('http://192.168.56.1:3000/', <String, dynamic>{
      'transports': ['websocket'],
      'autoConnect': true,
    });

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

在我的后端我有这个:

文件index.js

const express = require('express');
const path = require('path');
require('dotenv').config();

const app = express();

const server = require('http').createServer(app);
module.exports.io = require('socket.io')(server);
require('./sockets/socket');

const publicPath = path.resolve( __dirname, 'public' );
app.use( express.static( publicPath ) );

server.listen( process.env.PORT, ( err ) => {

    if ( err ) throw new Error(err);
    console.log('Servidor corriendo en puerto', process.env.PORT );

});

文件socket.js

const { io } = require('../index');

io.on('connection', client => {
    console.log('Cliente conectado');
    client.on('disconnect', () => {
        console.log('Cliente desconectado');
    });
    client.on('mensaje', ( payload ) => {
        console.log('Mensaje', payload);
        io.emit( 'mensaje', { admin: 'Nuevo mensaje' } );
    });
});

在网络上运行良好,打印的“断开连接”和“连接”完美,但是当我尝试在我的手机中调试时,没有任何事情发生,我没有从套接字实例收到任何消息,如果有人知道如何解决这个我会很感激。

标签: androidnode.jsflutterdartsocket.io

解决方案


您可以将代码上传到Heroku服务器,也可以创建一个ngrok URL 以将套接字与物理设备连接。


推荐阅读