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

2023-12-21

假设以下场景:

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

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

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

a) 客户是否应该期望他的数据可能已经被处理? (然后尝试例如 GET 请求来检查数据是否已提交)

b) 如果不是 (a) - 服务器应该检测到它吗?有可能在 Rails 中做到这一点吗?在这种情况下,可以撤销更改。在这种情况下,我期望 Rails 应用程序有某种期望,但没有......


HTTP是无状态协议 http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol:根据定义,这意味着您无法在客户端知道 http 动词POST是否成功。

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

  • 服务器端会话 http://en.wikipedia.org/wiki/Session_(computer_science)
  • cookies http://en.wikipedia.org/wiki/HTTP_cookie
  • 表单中的隐藏变量

However,这些都不能真正帮助解决您的问题。当我过去遇到这些类型的问题时,他们是几乎总是结果服务器处理 Web 请求的时间过长 https://stackoverflow.com/q/26298674/1184492.

有一句话非常好,我在不眠之夜对自己低语:

“网络请求是一个可怕的地方,你想要尽快进入和退出 尽你所能”——里克·布兰森

您希望在 100 - 500 毫秒内进入和退出网络请求。您满足了这些数字,您将拥有一个表现良好/与 Web 服务器配合良好的 Web 应用程序。

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

“认真处理”的一个例子可以是某种图像上传,可能在上传后进行一些图像处理。 任务分配和排队解决方案的一个示例是:RabbitMQ http://www.rabbitmq.com/ and Celery http://www.celeryproject.org/

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

  1. 将数据的一部分插入到 dbms 中(或者甚至更快一些)NoSQL http://en.wikipedia.org/wiki/NoSQL解决方案 )
  2. 将昂贵的处理工作交给后台任务。
  3. 返回到用户/网络客户端。 (即使在后台任务仍在运行)
  4. 用 (轮询、流式传输或网络套接字 https://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet/12855533#12855533)这一步并非易事,但最终的结果是值得付出努力的。

收紧这些网络请求,您的客户很少会收到回复。

在客户没有收到数据的那一天:你如何防止多个帖子...我对你的数据一无所知。但是,您可以执行一些与架构相关的操作来唯一标识您的帖子。即在服务器端计算出数据是否是update or a create.

这个答案 https://stackoverflow.com/a/26303084/1184492涵盖了一些您可以使用的轮询/流/websockets 技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

请求和响应处理之间的 HTTP 断开/超时 的相关文章

随机推荐

  • 如何在本机反应中将文本放在图像上?

    如何在本机反应中将文本垂直放置在图像上 我找到了这个文档 https medium com mheavers vertically centering text over images in react native with flexbo
  • 如何获取溢出:隐藏或溢出:滚动div的真实.height()?

    我有一个关于如何获得 div 高度的问题 我知道 height and innerHeight 但在这种情况下 他们都没有为我完成这项工作 问题是 在这种情况下 我有一个溢出宽度的 div 溢出 滚动 并且 div 具有固定的高度 如果我使
  • woocommerce 在添加到购物车时添加动态价格

    我的任务是 我有 test test1 test2 test3 gt 4 个产品 测试产品价格为 0 美元 添加到购物车时 添加到特定 测试 产品的价格为 500 美元 如何实现这一目标 我使用以下钩子 add action woocomm
  • 使用虚拟数据创建 DataTable 对象

    我正在尝试将 DataTable 数据绑定到手风琴 我发现如果我使用表适配器从数据库检索 DataTable 它会完美地绑定到手风琴 但是我想要做的是创建一个虚拟表 用于测试目的 如果我无权访问我的数据库 创建虚拟表的代码如下 DataTa
  • 使用 Python 从 WSDL 文件创建模拟 Web 服务

    我们正在为远程服务编写一个客户端 该客户端公开 SOAP Web 服务并发布这些服务的 WSDL 定义 我们在测试期间无法访问系统 因此我们想编写一个模拟服务 我们使用 Python 作为客户端 因此理想情况下我们希望使用 Python 作
  • unsigned int 与 size_t

    我注意到现代 C 和 C 代码似乎使用size t代替int unsigned int几乎无处不在 从 C 字符串函数的参数到 STL 我很好奇这样做的原因以及它带来的好处 The size ttype 是无符号整数类型 它是sizeof运
  • 模型中 _set 的 Django 管理器

    我目前正在学习 Django 但我不知道如何自己解决这个问题 我正在看书开发人员库 使用 Django 进行 Python Web 开发在一章中 您将构建一个简单的 CMS 系统 其中包含两个模型 故事和类别 一些通用和自定义视图以及视图模
  • 如何在 Python 中从 YAML 文件创建树形数据结构?

    假设我有一个 YAML 文件 如下所示 template artifacts config a value1 b value2 jars a value1 b value2 scripts a value1 b value2 我希望它像一棵
  • 如何增加 docker-machine 内存 Mac

    我是 Docker 新手 并尝试通过本教程从 Docker 映像设置 MemSQL http docs memsql com 4 0 setup docker http docs memsql com 4 0 setup docker 我使
  • 检查其中一个 div 是否包含我在 nightwatch 中的值

    我在使用 nightwatch js 测试我的 web 应用程序时遇到问题 我需要迭代页面上的所有 div 元素 以检查是否存在包含我之前添加的所有子元素的元素 例如我有 div h2 text1 h2 h3 second text1 h3
  • 如何使用unix替换ear中的文件

    我有一个sample ear 文件 我想替换sample ear 中的特定文件 consider ear file sample ear which content com1 test1 file1 sh and com2 file2 sh
  • C# - POST 请求中的正文内容

    我需要用 C 进行一些 api 调用 我正在使用 Microsoft 的 Web API 客户端来执行此操作 我成功发出了一些 POST 请求 但我不知道如何将字段 Body 添加到我的请求中 任何想法 这是我的代码 static Http
  • 在 LINQ 中加入匿名类型

    我确实有 2 个 C 声明表 它在程序创建期间初始化列 我想根据其 UserID 和 UserName 加入该表 我的代码如下 from nSJL in UserList AsEnumerable join SJL in UserListO
  • jQuery 在 asp net core 2 razor 中设置日期值

    我在我的 asp net core razor 表单中遇到 jQuery 问题 我可以使用 jQuery 在文本等输入类型中更改值 但不能更改日期类型 我不知道为什么 这是项目模型的一部分 只是我想更改形式的属性 DataType Data
  • 判断变量是否能被 2 整除

    如何判断一个变量能否被2整除 此外 如果是 我需要执行一个函数 如果不是 我需要执行一个不同的函数 使用模数 Will evaluate to true if the variable is divisible by 2 variable
  • 设置选择框的默认值

    我是流媒体新手 我尝试为 sidebar selectbox 设置默认值 代码如下 我很感激你的帮助 先感谢您 st sidebar header Settings fichier st sidebar selectbox Dataset
  • 如何在过程或触发器内创建 mysql 事件?

    最近我一直在寻找以下情况的解决方案 我有 mysql 表 其结构 CREATE TABLE IF NOT EXISTS battles id int 11 NOT NULL AUTO INCREMENT active tinyint 1 N
  • 如何在Python中获取多边形内的点列表?

    我进行了很多搜索 但找不到我的问题的任何实际答案 我有一个多边形 例如 86 52 85 52 81 53 80 52 79 48 81 49 86 53 85 51 82 54 84 54 83 49 81 52 80 50 81 48
  • cadvisor 错误报告容器内存使用情况

    cAdvisor 报告 Prometheus 使用的内存为 14GB 而 top 报告为 6 xGB 有人可以解释为什么会出现这种差异吗 container memory usage bytes 的文档说 Current memory us
  • 请求和响应处理之间的 HTTP 断开/超时

    假设以下场景 客户端正在向服务器发送 HTTP POST 请求有效并且 已被服务器处理 数据已插入数据库 Web 应用程序正在响应客户端 客户端超时 并且看不到 HTTP 响应 在这种情况下 我们会遇到以下情况 客户不知道他的数据是否有效以