我正在制作推文删除器,我想向用户更新进度。我是 socket.io 的新手,我设法将反应前端连接到 nodejs/express 后端。
io.on("connection", (socket) => {
console.log("new connection");
socket.on("disconnect", () => console.log("disconnected"));
});
当用户单击删除按钮时,删除请求会发送到后端,然后处理包含推文的文件,感谢 Bull,每条推文都作为一个作业排队。
因为我添加ìo
到我的路由中,我可以在它们内部使用它,但io.emit()
会发送到连接的客户端,我只想通过socket.emit()
在我的路由内部以及队列中的作业内部使用来发送给发送者。
我尝试的方法是在内部编写一个io.on("connection")
这样的函数并使其成为全局函数:
io.on("connection", (socket) => {
console.log("new connection");
socket.on("disconnect", () => console.log("disconnected"));
global.emitCustom = function (event, payload) {
socket.emit(event, payload);
};
});
这使我可以在队列处理功能中使用:
const deletionProcess = async ({
data: { tweetId, tokens, twitterId, numberOfTweets, index },
}) => {
emitCustom("deleting", {
type: "deleting",
progress: Math.round(((index + 1) / numberOfTweets) * 100),
});
};
有一个更好的方法吗?我的方法是错误的还是存在任何缺陷?它在我做的几个测试中起作用。