0

假设我要部署一个可能放置在 NAT/防火墙后面的服务器应用程序,并且我不想要求用户调整他们的 NAT 端口映射。换句话说,与服务器的连接是不可能的,但我的应用程序本质上是一个服务器应用程序,即它按 URI 发送回对象。

现在,我正在考虑定期从服务器启动连接,以查看需要响应的请求。我将通过端口 80 使用 HTTP,因为它几乎可以在任何地方通过 NAT/防火墙工作。

问题是,在实现可以在应用程序级别充当服务器的客户端(特别是使用 HTTP)时,是否有任何标准考虑和常见做法?任何特殊的 HTTP 标头?设计模式?

例如,我正在考虑以下方案:

  • 客户端(这是我的逻辑服务器)向服务器发送一个虚拟 HTTP 请求
  • 服务器以非标准的 headers X-Request-URI:、等作为响应X-Host:X-If-Modified-Since:换句话说,将请求 headers 包裹在 X-xxx 中,因为在这种情况下它们不是标准的;还请求保持连接处于活动状态
  • 客户端以发送请求对象的 POST 请求进行响应;再次,使用包装的标题(例如X-Status:,等)

除非有更“标准”的方式来做这样的事情,你认为我的方法是合理的吗?

编辑:这里在 reddit 上进行了一次有趣的讨论

4

1 回答 1

0

我做过类似的事情。这是很常见的。客户端启动与服务器的连接并保持连接处于活动状态。如果会话关闭,客户端将重新启动。当会话启动时,服务器可以将任何内容推送到客户端,因为它是客户端启动的。

于 2011-09-03T16:49:03.130 回答