假设以下情况:
已由服务器处理。数据已插入数据库。
并且看不到HTTP响应。
在这种情况下,我们遇到以下情况:
-客户不知道他的数据是否有效并已正确插入
-Web服务器(Rails 3.2应用程序)不显示任何异常,无论它是否位于apache代理之后
我在HTTP文档中找不到如何处理这种情况。我的问题是:
a)客户应该期望他的数据可能已经被处理了吗? (因此,请尝试例如执行GET请求以检查是否已提交数据)
b)如果不是(a)-服务器应该检测到它吗?有可能在 rails 上这样做吗?在这种情况下,更改可以撤消。在这种情况下,我会期望从Rails应用中获得某种期望,但是没有...
最佳答案
HTTP is a stateless protocol:根据定义,这意味着您无法在客户端上知道http-verb POST
是否成功。
Web应用程序使用了一些技术来克服此HTTP“功能”。他们包括。
但是,这些都不能真正解决您的问题。过去,当我遇到这些类型的问题时,它们都是,几乎总是the server taking too long to process the web request 的结果。
在不眠之夜我低声说:
您想在100-500毫秒内进入和退出网络请求。您达到了这些数字,您将拥有一个Web应用程序,该Web应用程序可以很好地运行/与Web服务器一起玩。
为此,我建议您调查的时间,并弄清楚如何缩短这些请求。如果在执行dbms插入之前在服务器端进行了认真的处理,则应考虑将这些处理交给某种任务/排队系统。
“严重处理”的一个示例可能是某种图像上传,可能在上传后进行了一些图像处理。
任务和排队解决方案的一个示例是:RabbitMQ和Celery
解决此问题的示例可能是:
收紧那些Web请求,这将是罕见的一天,您的客户不会收到响应。
在客户未收到数据的罕见日子:如何防止发布多个帖子...我对您的数据一无所知。但是,您可以执行一些与架构相关的操作来唯一标识您的帖子。即在服务器端确定数据是
update
还是create
。This answer涵盖了您可以使用的一些轮询/流传输/网络套接字技术。
关于ruby-on-rails - 请求和响应处理之间的HTTP断开连接/超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26806850/