2014-01-25 3 views
2

Я работаю над проектом узла, который я хочу запустить через кластер узлов. Поскольку у меня есть общие ресурсы и конфигурация, которые могут использоваться каждым кластером узлов (Worker), при запуске я прочитал эту конфигурацию и сохранил ее в redis db. Кроме того, в некоторых других модулях мне нужно запросить некоторый внешний ресурс и получить некоторые данные и сохранить в redis db тоже (не при запуске, когда мне нужно). Для этого reseaon, на запуске я кладу раздел конфигурации в функцию и вызвать его, если кластер Master (cluster.isMaster):отличить главный кластер узла в других модулях

if (cluster.isMaster) 
configure(); 

мой вопрос, как я могу сделать то же самое в других модулях? в других модулях мне нужно запросить внешний ресурс и поместить его в redis только в главном кластере, так как после этого он будет доступен и для рабочих кластеров. Таким образом, нет необходимости запрашивать во всех кластерах.

Так спасибо заранее,

+0

Попробуйте 'require ('cluster'). IsMaster' –

ответ

2

С апи http://nodejs.org/api/cluster.html

cluster.isMaster # булевой Правда, если процесс является мастером. Это , определяемый process.env.NODE_UNIQUE_ID. Если process.env.NODE_UNIQUE_ID не определено, то isMaster является истинным.

В вас модулей, вы можете проверить require('cluster').isMaster, вы не должны проверить process.env.NODE_UNIQUE_ID непосредственно, потому что он всегда будет удален после запуска, всегда быть неопределенным. https://github.com/nodejs/node/blob/16689e30aeff03c8c47a605425727cf190c169e9/lib/internal/bootstrap_node.js#L129

+0

thanks :), который работает, могу ли я иметь глобальную переменную в моем senario? – ali

+0

'process' - глобальная переменная, вам просто нужно углубиться в' process.env.NODE_UNIQUE_ID' – TruongSinh

 Смежные вопросы

  • Нет связанных вопросов^_^