使用socket.io
,在服务器端有connect
事件的回调。
io = require("socket.io")(httpserver)
io.on("connect", (socket) => {
//all socket related code in here
}):
在我的用于聊天应用程序的nodejs后端服务器(socket.io 2.2.0和Nodejs 10.x)中,io
在index.js
中实例化:
io.on('connection', (socket) => {
app.set("socket", socket);
socket.on('private message', (msg) => {
console.log("client socket id : ", socket.id);
console.log("msg received by server socket : ", msg);
});
console.log("Socketio server is initialized");
//other things as needed
//disconnect
socket.on('disconnect', async function() {
try {
//do something
} catch(err) {
console.log("err in false socket id", socket.id);
}
console.log('disconnected event');
});
});
由于在路由模块中发生了其他侦听和发出事件,因此socket
变量将被传递并能够根据需要在以下模块中进行检索。例如,在检索消息之后,服务器路由模块会加入聊天室并将消息发送回连接的客户端:
socket.join(req.query.event_id);
socket.emit("private message", `joined room ${req.query.event_id}`);
我想到的一个潜在问题是,在模块中调用socket
时可能是undefined or null
,这可能会使服务器应用程序崩溃。我还需要担心和避免其他潜在问题吗?还有其他更好的方法来处理与socket.io相关的代码吗?