【附带效果视频】php接口给前端返回流式数据,php使用event-stream进行数据推送,循环一次输出一次
warning:
这篇文章距离上次修改已过191天,其中的内容可能已经有所变动。
在PHP中使用event-stream
进行服务器推送事件(SSE)可以通过以下方式实现:
首先,确保你的PHP环境支持event-stream
库。如果没有,你可以通过Composer安装它:
composer require kriswallsmith/buzz-event-stream
然后,你可以使用以下代码创建一个简单的SSE服务器端推送接口:
<?php
require 'vendor/autoload.php';
use Buzz\Message\EventStream\EventStream;
use Buzz\Message\Response;
use Buzz\Message\RequestInterface;
use Buzz\Client\ClientInterface;
use Buzz\Client\Curl;
class SseController
{
private $eventStream;
public function __construct()
{
$this->eventStream = new EventStream();
}
public function streamData()
{
$response = new Response();
$response->setHeader('Content-Type', 'text/event-stream');
$response->setHeader('Cache-Control', 'no-cache');
$response->setHeader('Connection', 'keep-alive');
$this->eventStream->setResponse($response);
$this->eventStream->push('event', 'data', ['id' => uniqid()]);
// 循环发送数据
while (true) {
// 这里可以从数据库或其他来源获取数据
$data = [
'key' => 'value', // 你的数据
];
$this->eventStream->push('event', json_encode($data), ['id' => uniqid()]);
// 假设每秒发送一次数据
sleep(1);
}
$this->eventStream->flush();
}
}
$controller = new SseController();
$controller->streamData();
这段代码会创建一个SSE连接,并且每秒发送一次数据。你可以将其放入一个PHP脚本中,并通过HTTP请求访问。
请注意,这只是一个简单的示例。在实际应用中,你可能需要添加错误处理、连接管理和安全性措施。此外,你还需要确保你的服务器配置允许长时间运行的脚本。
评论已关闭