gpt4 book ai didi

javascript - 套接字 io 传输错误

转载 作者:太空狗 更新时间:2023-10-29 19:26:19 27 4
gpt4 key购买 nike

我试图在与套接字 io 断开连接时向后端发送用户名,当我在取消订阅套接字连接时将用户名作为参数传递时,它给了我问题传输错误。

这是我的代码

客户端“连接”只是一个变量:

      messages = [];
connectedUsers = [];
connection;
message;
Username = JSON.parse(localStorage.getItem('user')).username;
users = [];

ngOnDestroy() {
this.connection.unsubscribe({username: 'emons'});
}

服务器端这是我处理 emit 的地方,控制台日志可以正常工作,但是“console.log(usersConnected[i] +'被拼接')”不起作用,因为从未满足条件:

const app = express();

const port = 3000;
const server = http.Server(app);
const io = socketIo(server);

var usersConnected = [];

io.on('connection', function(socket){
console.log('a user connected');
/*socket.on('new-connection', function(user) {
io.sockets.emit('newUser', {type: 'new-connection', username: user});
}); */


socket.on('disconnect', function(user){
console.log(user + ' jsjasdjbskjcbawsjbsajdbasjabdsj')
for (var i = 0; i < usersConnected.length; i++) {
if (user.username == usersConnected[i]) {
usersConnected.splice(i, 1);
console.log(usersConnected[i] +' was spliced')
};
}
console.log(usersConnected);
console.log('user disconnected');
});


socket.on('add-message', function(msg){
console.log('added message');
io.sockets.emit('message', {type: 'new-message', username: msg.user, text: msg.message});
});
//trying to get all the users.
socket.on('chat-connection', (data) => {
socket.join(data.username);
console.log(data.username);
usersConnected.push(data.username);
io.emit('new-user', usersConnected);
})


});

聊天服务.ts:

   sendMessage(message) {
this.socket.emit('add-message', message);
}

sendUser(user) {
console.log(user);//print correctly
this.socket.emit('chat-connection', user);
}

removeUser(user) {
this.socket.emit('remove-user', user);
}

getMessages() {
let observable = new Observable(observer => {
this.socket = socketIo(this.url);
this.socket.on('message', (data) => {
observer.next(data);
});

return () => {
this.socket.disconnect();
}
});
return observable;
}

getUsers() {
let userObservable = new Observable(observer => {
this.socket = socketIo(this.url);
this.socket.on('new-user', (data) => {
observer.next(data);
});
});
return userObservable;
}

最佳答案

我认为你的服务器端可以是:

let allClients = [];

socket.on('connection', function(client) {
allClients.push(client);

client.once('disconnect', function() {
console.log('Got disconnect!');

client.disconnect();
var i = allClients.indexOf(client);
allClients.splice(i, 1);
});

client.on('LEAVE_ROOM', function (data) {
console.log('Got disconnect!', data);

client.disconnect();
var i = allClients.indexOf(client);
allClients.splice(i, 1);
});
});

disconnect 网络断开事件。您可以在初始化 SocketIO Server 时设置超时:

pingTimeout (Number): how many ms without a pong packet to consider the connection closed (60000)

客户端可以是:

$(window).on('beforeunload', function(){
socket.emit('LEAVE_ROOM', reason);
});

关于javascript - 套接字 io 传输错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49718390/

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