我正在开发一个节点项目,我想通过节点集群运行它。由于我有一些可供每个节点集群(Worker)使用的共享资源和配置,因此在启动时我会读取这些配置并将其保存到redis db中。此外,在其他一些模块中,我需要查询一些外部资源并获取一些数据并保存到redis db中(不需要在启动时)。对于这个研究,在启动时我将配置部分放入一个函数中,如果集群是Master(cluster.isMaster),则调用它:
if (cluster.isMaster)
configure();
我的问题是如何在其他模块中执行相同的操作?在其他模块中,我需要查询外部资源并将其放入主集群中,因为之后它也可用于工作集群。因此,无需在所有集群中进行查询。
非常感谢,
答案 0 :(得分:2)
来自api http://nodejs.org/api/cluster.html
cluster.isMaster#Boolean如果进程是主进程,则为True。这是 由process.env.NODE_UNIQUE_ID确定。如果 process.env.NODE_UNIQUE_ID未定义,则isMaster为true。
在您的模块中,您可以选中require('cluster').isMaster
,不应直接检查process.env.NODE_UNIQUE_ID
,因为它会在启动后始终被删除,始终未定义。 https://github.com/nodejs/node/blob/16689e30aeff03c8c47a605425727cf190c169e9/lib/internal/bootstrap_node.js#L129