5

node.js 中可用的哪些值结合起来为 node.js 中每个服务器上的每个进程创建一个唯一 ID?目前,我只知道如何获取进程ID。

4

2 回答 2

7

不确定您的要求是什么,但您可以对(主机名 + pid + 时间戳)进行哈希处理:

const crypto = require('crypto');
const os = require('os');

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

hash.digest('hex'); // "56f0dec9b403c5aa19827326555d6a5b"
于 2013-02-13T05:25:07.233 回答
5

node.js 是一个单线程服务器。它只会使用一个 CPU 内核(生成的进程可以使用其他内核)并且process.pid足以识别系统上的节点进程。如果您运行多个 node.js 服务器,那么每个服务器将有不同的 process.pid。

如果您希望单节点服务器利用多核 CPU,则必须在集群中运行 node.js。使用clusterhttp://nodejs.org/api/cluster.html

它将主线程分叉成多个工作线程,这些工作线程使用 IPC(进程间通信)相互通信。每个工作人员使用一个 CPU 内核。要获取每个工作人员的 ID,您可以使用worker.id http://nodejs.org/api/cluster.html#cluster_worker_id

编辑:从评论中添加

答案取决于可能值的大小/范围。在 LAN 主机名上,IP 和 pid 可能就足够了。此外,每台服务器都可以有多个可以监听的 NIC 和 IP。检查这个使用app.address() { address: '192.1.168.5', family: 'IPv4', port: 3000 }

于 2013-02-13T07:34:51.710 回答