Связь между несколькими процессами node.js - PullRequest
2 голосов
/ 25 августа 2011

У меня есть 3 приложения node.js (A, B, C).A является точкой входа, и мне нравится, чтобы все запросы, поступающие в эту точку входа, перенаправлялись в направлении B или C (в зависимости от значения параметра в запросе).

В настоящее время я делаю это с помощью res.redirect в A (я использую каркас expressjs).Это работает нормально, за исключением того, что это не совсем прозрачно (я вижу снаружи, что исходный запрос был перенаправлен).

Чтобы решить эту проблему, у меня будет B и C прослушивать сокет вместо номера порта, но я не знаю, как получить A, перенаправляющий запрос на сокеты, используемые B или C.
Любая идея окак сделать процесс 2 node.js общающимся через сокеты?

** ОБНОВЛЕНИЕ **

I have changed the code of A to use node-proxy:  

app.all('/port/path/*', function(req, res){

    // Host to proxied to
    var host = 'localhost';

    // Retrieve port and build new URL
    var arr_url = req.url.split('/');
    var port = arr_url[1];
    var new_url = '/' + arr_url.slice(2).join('/'); 

    console.log("CURRENT URL:" + req.url);  // url is /5000/test/...
    console.log("NEW URL    :" + new_url);  // url is /test/...

    // Change URL
    req.url = new_url;

    var proxy = new httpProxy.HttpProxy();
    proxy.proxyRequest(req, res, {
       host: host,
       port: port,
       enableXForwarded: false,
       buffer: proxy.buffer(req)
    });
    console.log("Proxied to " + host + ':' + port + new_url); 

    // For example: the url is localhost:10000/5000/test
    // the log tells me 'Proxied to localhost:5000/test' => that is correct
    // But... I do not get any return
    // If I issue 'curl -XGET http://localhost:5000/test' I get the return I expect

});

Любая очевидная ошибка в этом?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Вы на правильном пути, когда другие процессы прослушивают разные порты. То, о чем вы говорите, называется обратным прокси. Если его http, его довольно просто получить с помощью node-http-proxy:

https://github.com/nodejitsu/node-http-proxy

Вы хотите настроить что-то вроде прокси-таблицы:

var options = {
  router: {
    'foo.com/baz': '127.0.0.1:8001',
    'foo.com/buz': '127.0.0.1:8002',
    'bar.com/buz': '127.0.0.1:8003'
  }
};
0 голосов
/ 08 сентября 2011

Я просто поставил вопрос для модуля node-http-rpoxy здесь https://github.com/nodejitsu/node-http-proxy/issues/104

По-видимому, на самом деле сейчас работает с сокетами Unix, но вот так (может быть изменено).

var options = {
    router: {
        'foo.com/baz': ':/tmp/nodeserver.sock',
    }
};

Все, что нужно, это двоеточие, чтобы использовать путь к сокету в качестве значения порта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...