Javascript 套接字io的传输错误
我试图在断开与套接字io的连接时将用户名发送到后端,当我在取消订阅套接字连接时将用户名作为参数传递给后端时,它给了我一个问题传输错误 这是我的密码 客户端“连接”只是一个变量:Javascript 套接字io的传输错误,javascript,angular,socket.io,Javascript,Angular,Socket.io,我试图在断开与套接字io的连接时将用户名发送到后端,当我在取消订阅套接字连接时将用户名作为参数传递给后端时,它给了我一个问题传输错误 这是我的密码 客户端“连接”只是一个变量: messages = []; connectedUsers = []; connection; message; Username = JSON.parse(localStorage.getItem('user')).username; users
messages = [];
connectedUsers = [];
connection;
message;
Username = JSON.parse(localStorage.getItem('user')).username;
users = [];
ngOnDestroy() {
this.connection.unsubscribe({username: 'emons'});
}
服务器端这是我处理emit的控制台日志的地方。控制台日志可以正常工作,但“console.log(usersConnected[I]+“was拼接”)”不起作用,因为从未满足以下条件:
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);
})
});
我认为您的服务器端可以:
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);
});
});
$(window).on('beforeunload', function(){
socket.emit('LEAVE_ROOM', reason);
});
断开连接
网络断开连接事件。您可以在初始化SocketIO服务器时设置超时:
PoTimeOUT(号码):有多少MS没有一个包考虑连接关闭(60000)< /P> 客户端可以是:
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);
});
});
$(window).on('beforeunload', function(){
socket.emit('LEAVE_ROOM', reason);
});
好奇的是,您是否访问了控制台日志?我获得了控制台日志,但“usersConnected[I]…”除外,因为打印时user=transport错误,因此从未满足此条件。您的
此连接是什么。取消订阅功能?我已尝试实现此功能,但不幸的是,我没有成功。无论如何,您是否可以在我使用的表单中实现代码,即使用已传递的套接字,我为上下文添加了额外的代码。我正处于截止日期,因此提出了一个不寻常的请求。@Samlemonts您是否尝试发送此socket.emit('LEAVE_ROOM',reason')代码>来自客户端?