初学者提个问题,Node Cluster 如何共享数据?
创建一个简单的 http 服务,目的是统计请求数,该例子中 fork 4 个进程,如下:
var http = require('http')
var cluster = require('cluster')
var pv = 0
if (cluster.isMaster) {
for (var i = 0; i < 4; i++) {
var worker = cluster.fork()
}
} else {
http.createServer((req, res) => {
pv++
console.log(`pid: ${process.pid}, pv: ${pv}`)
res.end('okay')
}).listen(4010)
}
结果:
pid: 70445, pv: 1
pid: 70445, pv: 2
pid: 70445, pv: 3
pid: 70445, pv: 4
pid: 70445, pv: 5
pid: 70445, pv: 6
pid: 70445, pv: 7
pid: 70445, pv: 8
pid: 70444, pv: 1
pid: 70444, pv: 2
pid: 70444, pv: 3
pid: 70444, pv: 4
pid: 70444, pv: 5
因为 fork 出来的每个进程都有自己单独的内存空间,所以这样统计 pv 显然是不行的。
所以有什么好的解决方案吗?
我看了一下 ioredis,尝试后发现它的 api 也是异步化的,并没能解决我的问题。
クラスターフォークはスレッドではなくプロセスです。プロセスは互いに独立しており、各プロセスは通常、別のプロセスのメモリ空間にアクセスすることは許可されていないため、同様の共有機能を実現したい場合に使用します。変数などはプロセス通信のみに依存します。
クラスターモジュールの公式ドキュメントでは、プロセス通信に関連する API を実際に見ることができます。
もちろん、データをデータベース (redis など) に保存して実現することもできます。共有するのですが、もっと面倒に感じます。 。 。
Redis に書き込みますか?