gpt4 book ai didi

sockets - 多个node.js进程之间的通信

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:14 24 4
gpt4 key购买 nike

我有 3 个 Node.js 应用程序(A、B、C)。 A 是一个入口点,我喜欢将到达此入口点的所有请求重定向到 B 或 C(取决于请求中参数的值)。

目前我正在使用 A 中的 res.redirect 来实现这一点(我正在使用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

});

这里有什么明显的错误吗?

最佳答案

让其他进程监听不同的端口,您的做法是正确的。你所说的就是所谓的反向代理。如果是 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'
}
};

关于sockets - 多个node.js进程之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com