Задать вопрос

Шаринг памяти между процессами в Nodejs?

Хабр! Нужна ваша помощь!

Суть проблемы объясню на примере:

В Nodejs запускаю несколько воркеров через cluster.

Есть массив А.

И например А[1] хранится в первом воркере, а A[2] во втором. Есть ли какой то способ шарить массив между всеми воркерами без использования redis и т.п.? То есть в идеале при выполнении в первом воркере console.log(A[2]) я получил реальное значение а не undefined.

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

Думал о создании некой песочницы для процессов, в которой все будет видно… Или может есть готовые решения?
  • Вопрос задан
  • 3461 просмотр
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Такой возможности нет и не может быть! Это известная задача, для нее изобретены скоростные транспорты типа 0MQ, смотрите в эту сторону zeromq.org/bindings:node-js
Ответ написан
Процессы являются изолированными.
Если вам нужны общие данные вместе с 8ю ядрами но без транспорта (например 0MQ), то вам нужен любой другой многопоточный язык программирования.
Ответ написан
Комментировать
Может это не совсем правильно, но я использовал модуль ws

В первом процессе
var WebSocketServer = require('ws').Server
    , wss = new WebSocketServer({
        port: 9090
    });

wss.on('connection', function(ws){
    console.info("Установлено соединение с модулем");
    ws.send("Шлем данные второму процессу");
    startExpress(ws);
});


Во втором
var WebSocket = require('ws');

// Конектимся
var onDutyWs = new WebSocket('ws://127.0.0.1:9090');
onDutyWs.on('open', function(ws) {
    ws.send("Шлем данные первому процессу");
    console.log("Подключились!");
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы