如何处理NodeJS中单个ChildProcess的多个动态创建的侦听器?

时间:2015-06-28 15:16:03

标签: javascript node.js

我有一个子进程工作者,它接收一些数据并将结果发送回动态连接的侦听器。

简化代码:

f(0)

直到我发现如果socket.on(“触发器”在不同用户的非常精确的时刻被触发,每个侦听器都会收到相同的消息。

我可以将worker.once更改为worker.on,但它不是修复,因为我必须过滤传入的数据,然后可能找到一种方法来清除动态添加的侦听器。我在这做错了什么?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案之一可能是将一些特定于用户的数据(例如远程IP地址和端口或其他一些唯一标识符)传递给工作人员,而不仅仅是将其传递回响应中的父级。这样您就可以将响应与正确的套接字匹配。

这意味着您只有一个message侦听器(在socket.io connection处理程序之外添加)。然后,您将根据响应中传递的信息查找套接字,并将任何数据发送回该客户端。例如:

//foobar.js
worker.on('message', function(responseData) {
  // assuming worker returns `{id: ..., data: ...}`
  var socket = io.sockets.sockets[responseData.id];
  if (socket)
    socket.emit('response', responseData.data);
});
io.sockets.on('connection', function (socket) {
  socket.on('trigger', function (data) {
    worker.send({ id: socket.id, data: data });
  });
});