gpt4 book ai didi

flutter - 用于套接字连接多次触发的socket_io_client

转载 作者:行者123 更新时间:2023-12-03 03:30:18 28 4
gpt4 key购买 nike

我正在使用flutter应用程序中的socket_socket_io_client库。
例如

@override
void initState() {
super.initState();
connectToSocket();
});

connectToSocket() {
Socket socket = io('http://xyxz', <String, dynamic>{
'query': {"sdsxyz"} // optional
});
socket.connect();
}
在initState调用此方法。
用于 socket 连接。
但是套接字连接触发器在服务器端多次触发(套接字连接的套接字已断开连接)。
服务器端代码。
const app = require('express')()
const http = require('http').createServer(app)
app.get('/', (req, res) => {
res.send("Node Server is running. Yay!!")
})
//Socket Logic
const socketio = require('socket.io')(http)
socketio.on("connection", (userSocket) => {
console.log("Socket connected", userSocket.id)
userSocket.on("send_message", (data) => {
userSocket.broadcast.emit("receive_message", data)
})
})
我希望套接字连接应为正常数据流调用一次。

最佳答案

您在哪里调用socket.connect()是这里的重要部分。如果我们的套接字连接了几次,则可能是在状态更改重新呈现的小部件上触发了您的方法。
尝试将其移动到initState末尾调用的新函数中:

@override
void initState() {
super.initState();

this.connectToSocket();
}

void connectToSocket() {
...
}
编辑:您还需要在处置时删除套接字,并使用对套接字的引用:
Socket socket;

@override
void initState() {
super.initState();
connectToSocket();
});

connectToSocket() {
if(socket){ return; }
socket = io('http://xyxz', <String, dynamic>{
'query': {"sdsxyz"} // optional
});
socket.connect();
}

@override
void dispose() {
if(socket) {
socket.disconnect();
}
super.dispose();
}

关于flutter - 用于套接字连接多次触发的socket_io_client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64392093/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com