【发布时间】:2021-11-14 09:25:47
【问题描述】:
我正在做一个有聊天室的项目。消息传递和加入消息工作正常,但我不知道当有人断开连接时如何显示消息。正如您将在下面的代码中看到的那样,我对 socket.io 了解不多。
(编辑)
服务器代码(Express/Node)
io.on('connection', socket => {
socket.on('message', ({ name, message }) => {
io.emit('message', { name, message })
})
socket.on('join' , (name)=>{
console.log(name);
socket.broadcast.emit("join" , name.usnm.toUpperCase() + " just joined")
})
socket.on('pre_disconnect', (name) => {
console.log(name);
socket.broadcast.emit("pre_disconnect" , name.usnm.toUpperCase() + " just left")
})
})
客户端代码(React.js)
const socketRef = useRef()
useEffect(
() => {
socketRef.current = io.connect("http://localhost:4000")
socketRef.current.on("message", ({ name, message }) => {
setChat([ ...chat, { name, message } ])
})
socketRef.current.on("join", (usnm) => {
setChat([ ...chat, {name:usnm} ])
})
socketRef.current.on("pre_disconnect", (usnm) => {
setChat([ ...chat, {name:usnm} ])
})
},
[ chat ]
)
useEffect(
() => {
let usnm = sessionStorage.getItem("User");
socketRef.current.emit("join" ,{usnm});
return () => {
socketRef.current.emit("pre_disconnect" ,{usnm});
socketRef.current.disconnect()
}
},
[ ]
)
在上面的代码中,pre_disconnect 没有做任何事情。无论有没有它,代码的工作方式都是一样的。
【问题讨论】:
-
针对每个socket id,你是否维护了服务器上所有连接用户的列表?还是只是在客户端?
标签: node.js reactjs express socket.io