来自不同服务器的响应的HTTP请求/响应

时间:2015-08-11 20:58:37

标签: scala http nginx clojure

在HTTP请求/响应方案中,我认为对响应请求的客户端并不重要(无论如何他都会告诉你)。

简而言之,我想从此开始:

Client
 ↓   ↑
 Nginx
  ↓   ↑
  ServerA
   ↓   ↑
   ServerB

对此:

Client
 ↓    ↑
 Nginx ↖
  ↓      ↖
  ServerA  ↖
   ↓      ↗
   ServerB

由于serverB已经有了响应并且没有进行额外的处理,我想绕过serverA,但是如果可能的话应该通过nginx(例如使用压缩)。

具体来说,我想了解更多:

  • 必要的nginx配置(如果有的话)

  • serverA和ServerB之间的协议交换是否必须特殊?

  • 必须传递的上下文才会发生这种情况?此外,如果他们使用不同的语言会发生什么(在我的案例中是Clojure和Scala)。

一个小样本示例将是非常欢迎(最好是Clojure,Scala,Java,Node.js - 任何语言,只要它可读)。

2 个答案:

答案 0 :(得分:0)

在HTTP请求/响应方案的情况下,我唯一能看到的是通过一些HTTP服务器推送。问题是,您将至少使用TCP连接进行Client / Nignx通信。我猜你可以使用某些技术“火上浇油”,但是你需要能够打开一个新的客户端连接来发送新的数据。

在您的第一种情况下,每个服务通过询问请求并等待回复进行通信。

在第二种情况下,您可以执行某些代理请求(无需等待任何响应),但有一些有关客户端的信息可以在服务器B中联系它(打开连接)。

我不知道哪种技术最适合这种技术,但这是我要采取的方向。

答案 1 :(得分:0)

如果所有这些连接都是HTTP请求,除非您自己实施某种man in the middle方案,否则它对客户端很重要。

基本上由于TCP连接的性质,HTTP协议使用哪种方式在线路上传输数据,客户端和服务器会尝试确保每条消息都传递给它的预定目标,并按顺序传递。 / p>

您可以研究TCP协议以更好地了解其局限性。 This视频似乎是一般概述的良好开端。在视频中的8:23,它类比TCP有点像电话交谈,这就是为什么在中间对话中改变服务器或客户端很难的原因。因为它不是那样设计的。

在电话中虽然您可以重定向请求,但您可以使用HTTP重定向来达到您所描述的效果。