套接字 IO 抖动未连接

Socket IO flutter not connecting

我在将我的套接字 io flutter 客户端连接到我的 nodejs 套接字 io 服务器时遇到问题。 我知道节点套接字 io 包和 flutter 套接字 io 客户端包之间的兼容性问题。因此,我只在两端安装了兼容版本的依赖项。

即 对于颤动

socket_io_client: ^1.0.2

和服务器端。

{
   "socket.io": "^2.4.1",
}

我也尝试了最新的依赖项,但我在日志中收到相同的 timeout 消息, 起初,我以为是我的服务器问题,但我使用邮递员检查了连接并且它有效。

下面我添加了服务器端和客户端的实现,

const { socketGuard } = require('./middlewares/socketio.middleware');
let io;

module.exports = {

    init: (server) => {
        
        io = require("socket.io")(server, { cors: { origin: '*' } });

        io.use(async (socket, next) => {

            let result = await socketGuard(socket);

            if (result.isValid) {
                next();
            }
            else {
                next(new Error("Not authorized"));
            }

        });

        io.on("connection", (socket) => {

            console.log(`${socket.id} : connected`);

        });

        return io;
    },

    get: () => {


        if (!io) {


            throw new Error("Socket io not initialized");

        }

        return io;

    }

};

为了 flutter,我在 init 函数中添加了以下行,

    io.Socket socket = io.io("http://192.168.1.14:5000");

    socket.onConnect((data) {log("Hello world");});

    socket.onConnectError((data) {log(data);});

    socket.onError((data) {log(data);});

    socket.on("message", (data) {log(data);});

根据 socket_io client readme

In Flutter env. not (Flutter Web env.) it only works with dart:io websocket, not with dart:html websocket or Ajax (XHR), so in this case you have to add setTransports(['websocket']) when creates the socket instance.

尝试在初始化 socket 时添加选项 Map

这只是与 pub.dev 中的示例做同样事情的不同方法。

io.Socket socket = io.io("http://192.168.1.14:5000", <String, dynamic>{
    "transports": ["websocket"],
});

在我的一个项目中,我可以确认如果不传入它,它就无法工作。