请求和响应处理之间的HTTP断开连接/超时

芬斯

假设以下情况:

  1. 客户端正在向服务器发送HTTP POST
  2. 请求有效,已由服务器处理。数据已插入数据库。
  3. Web应用程序正在响应客户端
  4. 客户端遇到超时并且看不到HTTP响应。

在这种情况下,我们遇到以下情况:-客户端不知道其数据是否有效并已正确插入-Web服务器(rails 3.2应用程序)不显示任何异常,无论它是否在apache代理后面

我在HTTP文档中找不到如何处理这种情况。我的问题是:

a)客户应该期望他的数据可能已经被处理吗?(因此,例如,尝试使用GET请求检查数据是否已提交)

b)如果不是(a)-服务器应该检测到它吗?有可能在铁轨上这样做吗?在这种情况下,更改可以撤消。在这种情况下,我会期望从Rails应用中获得某种期望,但是没有...

杰夫·谢菲尔德

HTTP是一种无状态协议:根据定义,这意味着您无法在客户端上知道http-verbPOST是否成功。

Web应用程序使用了一些技术来克服此HTTP“功能”。它们包括。

但是,这些都不能真正解决您的问题。过去,当我遇到这些类型的问题时,它们几乎总是服务器处理时间过长而导致的

在不眠之夜我低声说:

“ Web请求是一个令人恐惧的地方,您想尽快进入和退出”-Rick Branson

您希望在100-500毫秒内进入和退出Web请求。达到这些数字,您将拥有一个Web应用程序,该Web应用程序可以很好地运行/与Web服务器一起玩。

为此,我建议您调查一下您的帖子花了多长时间,并弄清楚如何缩短这些请求如果在进行dbms插入之前在服务器端进行了认真的处理,则应考虑将这些处理交给某种任务/排队系统。

“严重处理”的一个示例可能是某种图像上传,可能在上传之后进行了一些图像处理。任务和排队解决方案的一个示例是:RabbitMQCelery

解决您的问题的示例可能是:

  1. 将您的部分数据插入dbms(甚至更快一些NoSQL解决方案)
  2. 将昂贵的处理交给后台任务。
  3. 返回到用户/ Web客户端。(甚至在后台任务仍在运行)
  4. 用(轮询,流式传输或websockets侦听最终响应。这不是一件容易的事,但最终结果值得付出努力。

收紧那些Web请求,这将是罕见的一天,您的客户不会收到响应。

在那个客户没有收到数据的罕见日子:您如何防止发布多个帖子...我对您的数据一无所知。但是,您可以执行一些与架构相关的操作来唯一标识您的帖子。即在服务器端找出数据是anupdate还是a create

该答案涵盖了您可以使用的一些轮询/流/ Websockets技术。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章