0

我正在制作推文删除器,我想向用户更新进度。我是 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),
  });
};

有一个更好的方法吗?我的方法是错误的还是存在任何缺陷?它在我做的几个测试中起作用。

4

0 回答 0