node.js - Node Cluster 如何共享数据?
阿神
阿神 2017-04-17 15:58:03
[Node.js讨论组]

初学者提个问题,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 也是异步化的,并没能解决我的问题。

阿神
阿神

闭关修行中......

全部回复(2)
阿神

cluster fork的是进程,而不是线程,进程之间是互相独立的,各自有各自的内存空间,一个进程一般是不被允许访问另一个进程的内存空间的,所以如果要实现类似共享变量一类的功能,只能依赖于 进程通信。
而在cluster模块的官方文档其实是可以看到有进程通信的相关API的,你可以看下Cluster
当然你也可以将数据存到数据库(如redis)来实现共享,不过我觉得更麻烦。。。

ringa_lee

写到Redis里?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号