我有3个node.js应用程序(A,B,C)。 A是一个入口点,我喜欢所有到达此入口点的请求被重定向到B或C(取决于请求中参数的值)。
目前我在A中使用res.redirect(我正在使用expressjs框架)。这工作正常,除了它不是真的透明(我可以从外面看到原始请求已被重定向)。
要解决这个问题,我会让B和C监听套接字而不是端口号,但我不知道如何将请求重定向到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
});
这有什么明显的错误吗?
答案 0 :(得分:1)
您正在使用其他进程侦听不同端口的正确轨道。您所谈论的内容称为反向代理。如果它的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'
}
};
答案 1 :(得分:0)
我刚刚在这里为node-http-rpoxy模块提出问题https://github.com/nodejitsu/node-http-proxy/issues/104
显然它现在确实可以使用unix套接字,但是像这样(可能会有变化)。
var options = {
router: {
'foo.com/baz': ':/tmp/nodeserver.sock',
}
};
它只需要一个冒号来使用套接字路径作为端口值。