您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman的http服务-响应 - 发送http chunk数据(有点懒加载的效果)
发布时间:2021-12-06 23:43:22编辑:雪饮阅读()
发送http chunk数据
必须先发送一个携带 Transfer-Encoding: chunked头的Response响应给客户端
发送后续chunk数据使用Workerman\Protocols\Http\Chunk 类
最终必须发送一个空的chunk来结束响应
实例:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Protocols\Http\Chunk;
use Workerman\Protocols\Http\Response;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8484');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
// 首先发送一个带Transfer-Encoding: chunked头的Response响应
$connection->send(new Response(200, array('Transfer-Encoding' => 'chunked'), 'hello'));
// 后续Chunk数据用Workerman\Protocols\Http\Chunk类发送
for($i=1;$i<=10000;$i++){
//模拟mysql慢查询
sleep(1);
$connection->send(new Chunk('第'.$i.'段数据<br/>'));
}
// 最后必须发送一个空的chunk结束响应
$connection->send(new Chunk(''));
};
// 运行worker
Worker::runAll();
?>
实例运行:
[root@izj6c2jeancylo0ppo4vz5z workerman]# php test.php start
Workerman[test.php] start in DEBUG mode
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.0.33
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none http://0.0.0.0:8484 1 [OK]
---------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
客户端请求
客户端会出来一点就显示一点。
而如果用传统的后端渲染
<?php
for($i=1;$i<=6;$i++){
sleep(1);
echo $i."<br/>";
}
?>
可以看到响应的时间是非常长的,那么而且内容还是必须要等待全部响应后才显示出来的。
这项技术据说facebook用的就很好,而大多数开发人员好像都没有应用到这一点,我平时也有见过类似的,但是很少,而且当时没有仔细观察是否是chunk实现的,不过现在想想应该就是chunk实现的。
关键字词:workerman,http,chunk
相关文章
- workerman的http服务-响应-重定向
- workerman的http服务-响应-重定向 - 发送文件(实现文件
- workerman的http服务-响应-重定向 - 发送cookie
- workerman的http服务-响应-快捷响应
- workerman的http服务-响应-更改状态码
- workerman的http服务-响应-更改状态码 - Response类初
- workerman的http服务-响应-发送header
- workerman的http服务-响应-发送header - Response类初
- workerman的http服务-请求-获取请求sessionId
- workerman的http服务-请求-获取请求HTTP版本