2013-02-13 2 views
1

Какие значения, доступные в объединении node.js, создают уникальный идентификатор для каждого процесса на каждом сервере в node.js? Сейчас я знаю только, как получить идентификатор процесса.Уникально идентифицировать процесс в node.js

+0

Что случилось с идентификатором процесса? – maerics

+0

Что вы подразумеваете под каждым сервером на node.js? Вы используете несколько серверов узлов. – user568109

+0

У меня может быть многоядерный сервер с несколькими процессами (на ядро). я мог бы также иметь несколько из них. Идентификатор процесса отлично, но он не уникален. –

ответ

2

Node.js является однопоточный сервер. Он будет использовать только одно ядро ​​ЦП (порожденные процессы могут использовать другие ядра), и process.pid будет достаточным для идентификации процесса узла в системе. Если вы запустите несколько серверов node.js, каждый из них будет иметь разные process.pid.

Если вы хотите, чтобы сервер с одним узлом использовал многоядерный процессор, вы должны запустить node.js в кластере. Используйте cluster package http://nodejs.org/api/cluster.html.

Он направляет основной поток в ряд рабочих потоков, которые общаются друг с другом с помощью IPC (Inter-Process Communication). Каждый рабочий использует ядро ​​процессора. Чтобы получить идентификатор для каждого работника можно использовать worker.idhttp://nodejs.org/api/cluster.html#cluster_worker_id

Edit: Добавление комментария от

Ответ зависит от размера/диапазона возможных значений. На имени хоста LAN может быть достаточно IP и pid. Также на каждом сервере может быть несколько NIC и IP, которые он может прослушать. Проверьте это, используя app.address() { address: '192.1.168.5', family: 'IPv4', port: 3000 }

+0

Мой вопрос не о pid или процессах. что я знаю. мой вопрос заключается в том, как сделать уникальный идентификатор для каждого процесса. PID недостаточно уникален. maerics имеет правильную идею. –

+0

Если вы пытаетесь сгенерировать некоторый идентификатор, который может различать процессы на машинах. Это зависит от размера/диапазона возможных значений. На имени хоста LAN может быть достаточно IP и pid. Также на каждом сервере может быть несколько NIC и IP, которые он может прослушать. Проверьте это, используя app.address() {адрес: '192.1.168.5', family: 'IPv4', port: 3000} – user568109

+0

спасибо. как ответ на этот комментарий. –

4

Не уверен, что ваши требования, но вы могли бы сделать хэш (имя хоста + PID + временной метки):

var crypto = require('crypto') 
    , os = require('os'); 

var parts = [os.hostname(), process.pid, +(new Date)] 
    , hash = crypto.createHash('md5').update(parts.join('')); 

hash.digest('hex'); // "56f0dec9b403c5aa19827326555d6a5b" 
+0

Какие другие требования могут сделать эту функцию другой? –

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