套接字 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);});
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"],
});
在我的一个项目中,我可以确认如果不传入它,它就无法工作。
我在将我的套接字 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);});
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"],
});
在我的一个项目中,我可以确认如果不传入它,它就无法工作。