【发布时间】:2018-09-17 23:49:57
【问题描述】:
我试图在与套接字 io 断开连接时向后端发送用户名,当我在取消订阅套接字连接时将用户名作为参数传递时,它给了我问题传输错误。
这是我的代码
客户端“连接”只是一个变量:
messages = [];
connectedUsers = [];
connection;
message;
Username = JSON.parse(localStorage.getItem('user')).username;
users = [];
ngOnDestroy() {
this.connection.unsubscribe({username: 'emons'});
}
服务器端这是我处理发射的地方,控制台日志正常,但 'console.log(usersConnected[i] +' was spliced')' 不起作用,因为条件从未满足:
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);
})
});
chat.service.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;
}
【问题讨论】:
-
只是好奇,你是在查看控制台日志吗?
-
我得到了控制台日志,除了 'usersConnected[i]...' 一个,因为条件从未满足,因为用户 = 打印时出现传输错误
-
你的
this.connection.unsubscribe功能是什么?
标签: javascript angular socket.io