一尘不染

关闭连接后继续处理

php

PHP中是否可以关闭连接(本质上告诉浏览器没有更多数据可用)但是可以继续处理。我正在考虑的特定情况是,我想提供缓存的数据,然后,如果缓存已过期,我仍然会提供缓存的数据以快速响应,关闭连接,但继续进行处理以重新生成并缓存新的数据数据。本质上,唯一的目的是使网站显得更具响应性,因为在用户等待内容重新生成时不会偶尔出现延迟。

更新:

PLuS对我一直在寻找最接近的答案。为了澄清几个人,我正在寻找可以实现以下步骤的东西:

  1. 用户请求页面
  2. 连接打开到服务器
  3. PHP检查缓存是否已过期,如果仍然新鲜,则提供缓存并关闭连接(END HERE)。如果已过期,请继续执行4。
  4. 服务过期的缓存
  5. 紧密连接,因此浏览器知道它不在等待更多数据。
  6. PHP重新生成新数据并将其缓存。
  7. PHP关闭。

更新:

这很重要,它必须是纯PHP解决方案。不能安装其他软件。


阅读 248

收藏
2020-05-29

共1个答案

一尘不染

我终于找到了解决方案(感谢Google,我只需要继续尝试搜索字词的不同组合)。

<?php
ob_end_clean();
header("Connection: close");
ignore_user_abort(true);
ob_start();
echo 'Text the user will see';
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // All output buffers must be flushed here
flush();        // Force output to client
// Do processing here 
sleep(30);
echo('Text user will never see');

我尚未进行实际测试,简而言之,您发送了两个标头:一个标头告诉浏览器确切的数据量,然后一个标头告诉浏览器关闭连接(只有在收到预期数量的标头之后才会执行此操作)内容)。我还没有测试过。

2020-05-29