Skip to content

ServerSentEvent — 服务端推送事件(SSE)

  • 文件位置: kernel/Foundation/HTTP/Response/ServerSentEvent.php
  • 命名空间: kernel\Foundation\HTTP\Response
  • 继承: 继承 kernel\Foundation\HTTP\Response
  • 是否可继承: 是

SSE(Server-Sent Events) 响应,服务端持续向浏览器推送事件。构造后进入循环,反复调用回调向客户端推送数据,直到连接断开或调用 close()

协议输出(每帧):

id: <uniqid>
event: <事件名>
data: <JSON/XML/文本>

属性

属性类型默认可见性说明
$responseEventNamestring"message"protected事件名称(输出到 event: 行)
$closedboolfalseprotected是否已关闭(退出循环)

方法速查表

方法作用
__construct($callback, $intervalTime, $outputType)构造:进入 SSE 推送循环
success($data, $event, $statusCode, $code, $message)推送成功事件
error($statusCode, $code, $message, $details, $data)推送错误事件
ping()推送 ping 心跳事件
output()输出一帧 SSE 数据
close()关闭 SSE 连接

方法

__construct($callback, $intervalTime = 1, $outputType = "json") — 构造并进入 SSE 循环

设置响应头(X-Accel-Buffering: no / Content-Type: text/event-stream / Cache-Control: no-cache),随后进入循环:调用回调 → 清空输出缓冲并 flush → 连接断开则跳出 → sleep($intervalTime)。需在回调内调用 success() / error() 等输出方法。

参数

参数类型默认说明
$callbackcallable推送回调,第一参数为当前响应实例
$intervalTimeint1推送间隔(秒)
$outputTypestring"json"输出数据类型:json / text / xml

返回值

  • 无。

示例

php
use kernel\Foundation\HTTP\Response\ServerSentEvent;

new ServerSentEvent(function (ServerSentEvent $Response) {
    $Response->success(["time" => time()]);
    $Response->ping();
});

success($data, $event = "message", $statusCode = 200, $code = 200000, $message = "ok") — 推送成功事件

构造成功响应并输出一帧。

参数

参数类型默认说明
$datamixed主体数据
$eventstring"message"事件名称
$statusCodeint200HTTP 状态码
$codeint|string200000响应码
$messagestring"ok"响应信息

返回值

  • $this:支持链式调用。

error($statusCode, $code = 500, $message = "error", $details = [], $data = []) — 推送错误事件

构造错误响应(事件名 error)并输出一帧。

参数

参数类型默认说明
$statusCodeintHTTP 状态码
$codeint|string500响应码
$messagestring"error"响应信息
$detailsmixed[]错误详情
$datamixed[]主体数据

返回值

  • $this:支持链式调用。

ping() — 推送 ping 心跳事件

推送 event: pingdata: <时间戳>,用于保持连接活跃。

参数

  • 无。

返回值

  • $this:支持链式调用。

output() — 输出一帧 SSE 数据

输出响应头,按 outputType 编码数据(jsonjson_encodexmlArr::toXML、其余原样),拼装 id / event / data 三行并输出。

参数

  • 无。

返回值

  • 无(void)。

close() — 关闭 SSE 连接

closed = true,让构造循环退出。

参数

  • 无。

返回值

  • $this:支持链式调用。