2016-02-12 130 views
0

你好,我有这个问题,我还没有找到anwser。 我想创建类似于我附加的图像。 Final Structure I want to realize我可以将一个http请求从一个node.js或python服务器转发到另一台服务器吗?

正常工作流应该是这样的:

  1. 客户端发送到服务器1的请求;
  2. 服务器1收到请求;
  3. 服务器1向客户端发送302(重定向)响应;
  4. 然后客户端发送一个新的http请求到服务器2;
  5. 服务器2收到请求;
  6. 服务器2向客户端发送200(ok)响应;

取而代之的是我想实现这样的:

  1. 客户端发送到服务器1的请求;
  2. 服务器1收到请求;
  3. 服务器1将请求转发到服务器2;
  4. 服务器2收到请求;
  5. 服务器2向客户端发送直接响应;

所以我不想从服务器1从客户端发送重定向响应客户端,然后一个新的请求到服务器2!

用node.js或者至少用python来实现类似的东西是可能的。我希望这种架构能够加快我的服务速度,因为服务器 - 服务器连接远快于客户端 - 服务器连接。

回答

0

您需要使用代理。

喜欢的东西 https://www.npmjs.com/package/http-proxy

,或者您可以使用nginx的或类似的的node.js服务器的前面是代理。

的唯一事情是请求必须通过代理回去,因为这就是如何TCP连接工作

+0

无法直接从服务器2与客户端进行通信吗?通过服务器1将会浪费时间我(因为服务器1无法详细说明其他请求) – Giuseppe

+0

如果您正确编程服务器1 - 是的,它可以详细说明其他请求。从客户端连接到服务器1,并且请求和响应必须沿着相同的连接。 Web服务器被设计为同时支持多个连接,因此您不会通过将请求传递到服务器2来阻止其他请求。这样的代理是大型网站的标准做法,其中瓶颈是服务器2而不是服务器1。 – akc42

1

如果你需要做一些逻辑server1的执行请求到Server2之前(例如选择在服务器端点2),那么您可以使用来自Node.js标准库http模块的请求功能(请参阅文档https://nodejs.org/dist/latest-v4.x/docs/api/http.html#http_http_request_options_callback)。但是,如果您不需要执行任何逻辑,那么最好使用https://www.npmjs.com/package/http-proxy,因为您避免很多样板代码

+0

是的,我需要做一些逻辑。首先,服务器1检查文件系统中是否存在文件 - 如果存在文件则将其返回给客户端 - 否则调用服务器2来获取文件。所以我想你提到的第一种可能性是正确的。然后省略我真正想知道的实现,如果在返回客户端的方式中,需要从服务器2通过服务器1(这将浪费大量时间) – Giuseppe

+0

一旦server1执行HTTP请求到server2,那么您可以管道server2响应到server1响应中。这样服务器2响应就由服务器1传输给客户端。从客户端到服务器2的直接连接不是严格可行的,因为到server2的请求由服务器1执行,而不是客户端执行。 – yeiniel

相关问题