节点js中共享内存的最佳模块?

时间:2017-06-30 09:44:33

标签: node.js

我想在两个单独的进程之间共享内存。任何人都可以建议我在节点j中使用的最佳模块。我想以json格式保存数据并在两个进程之间共享。我正在使用shm -typed-array模块,但由于资源较少,我无法解决问题。

这是代码:

Parent.js:-------------------

"use strict";

const shm = require('shm-typed-array');
const fork = require('child_process').fork;

// Create shared memory
const SIZE = 20000000;
const data = shm.create(SIZE, 'Float64Array');

// Fill with dummy data
Array.prototype.fill.call(data, 1);

// Spawn child, set up communication, and give shared memory
const child = fork("child.js");
child.on('message', sum => {
    console.log(`Got answer: ${sum}`);

    // Demo only; ideally you'd re-use the same child
    child.kill();
});
child.send(data.key);

Child.js:---------------

"use strict";

const shm = require('shm-typed-array');

process.on('message', key => {
    // Get access to shared memory
    const data = shm.get(key, 'Float64Array');

    // Perform processing
    const sum = Array.prototype.reduce.call(data, (a, b) => a + b, 0);

    // Return processed data
    process.send(sum);
});

请提出任何建议......

1 个答案:

答案 0 :(得分:1)

我建议当前使用Redis。这只是一个用redis每秒增加一个计数器的示例。您可以跨进程使用.get。如果您正在寻找Windows版本的Redis,可以在这里https://github.com/dmajkic/redis/downloads

const redis = require('redis');
const client = redis.createClient();

setInterval(() => {
    client.get("count", (error, data) => {
        data = JSON.parse(data);
        data++;
        client.set("count", data);
    });
}, 1000);