Node.js Socket.io断开与组件的连接不工作将卸载
我正在尝试使用socket.io创建实时聊天。但是,我无法断开聊天应用程序的连接 前端Node.js Socket.io断开与组件的连接不工作将卸载,node.js,reactjs,sockets,Node.js,Reactjs,Sockets,我正在尝试使用socket.io创建实时聊天。但是,我无法断开聊天应用程序的连接 前端 constructor(props){ super(props); this.state={ endpoint: 'localhost:3001' } this.socket = socketIOClient(this.state.endpoint); } componentDidMount
constructor(props){
super(props);
this.state={
endpoint: 'localhost:3001'
}
this.socket = socketIOClient(this.state.endpoint);
}
componentDidMount() {
this.socket.emit('join', {name: "name",room: "rooms" }, () => {
});
}
componentWillUnmount(){
this.socket.emit('disconnect');
this.socket.off();
}
服务器端
var app = express();
let server = app.listen(PORT, ()=> console.log('Listening on port ' + PORT));
let io = require('socket.io')(server);
io.on('connection', (socket) => {
console.log('We have a new conneciton');
socket.on('join', ({name, room}, callback) => {
console.log(name, room);
})
socket.on('disconnect', () => {
console.log('user had left');
})
})
卸载组件时,控制台中不会弹出用户离开的窗口
我哪里出错了
我还注意到,套接字“join”和“disconnect”将始终运行,即使我没有从客户端调用。为什么会这样?您应该使用
socket.disconnect()
来断开与套接字的连接
off()不会阻止此客户端套接字接收任何服务器发送的消息,它只是防止触发指定的事件处理程序。通常情况下,这是我们想要的
join/disconnect
是套接字中的默认事件,join
事件将在客户端连接到套接字时始终触发,disconnect
事件将在客户端断开连接时始终触发。这就是为什么您在日志中看到这些事件,即使您没有显式调用这些事件,这些事件也会自动调用
请尝试以下代码以断开与套接字连接的连接
constructor(props){
super(props);
this.state = {
endpoint: 'localhost:3001'
}
this.socket = socketIOClient(this.state.endpoint);
}
componentDidMount() {
this.socket.emit('join', { name: "name", room: "rooms" }, () => {
});
}
componentWillUnmount(){
this.socket.emit('disconnect');
socket.disconnect();
}
啊,明白了!谢谢你,先生