当前位置:首页 > PHP

sse实现php

2026-02-14 11:00:58PHP

SSE(Server-Sent Events)是一种服务器向客户端推送实时数据的协议,基于HTTP长连接。以下是PHP实现SSE的详细方法:

基本实现步骤

设置正确的HTTP头信息,确保浏览器识别为SSE流:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
header('X-Accel-Buffering: no'); // 禁用Nginx缓冲

使用循环持续输出数据,并刷新缓冲区:

while (true) {
    $currentTime = date('Y-m-d H:i:s');
    echo "data: {$currentTime}\n\n";
    ob_flush();
    flush();
    sleep(1);
}

事件格式规范

SSE数据需遵循特定格式:

  • 每行以field:开头(如data:event:
  • 每条消息以双换行符\n\n结束
  • 示例发送命名事件:
    echo "event: update\n";
    echo "data: {\"user\": \"Alice\", \"status\": \"active\"}\n\n";

中断处理与重连

客户端自动重连机制需服务器支持:

  • 设置retry:字段建议重连间隔:
    echo "retry: 3000\n"; // 3秒后重试
  • 处理连接中断:
    ignore_user_abort(true); // 防止PHP脚本因客户端断开而终止
    connection_aborted() // 检测连接状态

完整示例代码

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');

function sendEvent($data, $event = null) {
    if ($event) echo "event: {$event}\n";
    echo "data: " . json_encode($data) . "\n\n";
    ob_flush();
    flush();
}

$counter = 0;
while (++$counter < 10) {
    sendEvent([
        'time' => date('H:i:s'),
        'count' => $counter
    ], 'tick');
    sleep(1);
}

sendEvent(['action' => 'close'], 'end');
?>

注意事项

  • Nginx/Apache可能需要调整配置以支持长连接
  • 避免输出任何非SSE格式内容(包括错误信息)
  • 生产环境建议增加身份验证和来源检查
  • 浏览器兼容性:除IE/Edge Legacy外均支持

高级应用

结合数据库查询实现实时通知:

sse实现php

$lastId = $_SERVER['HTTP_LAST_EVENT_ID'] ?? 0;
while (true) {
    $newMessages = queryMessagesSince($lastId);
    foreach ($newMessages as $msg) {
        sendEvent($msg, 'new_message');
        $lastId = $msg['id'];
    }
    sleep(1);
}

通过上述方法,PHP可高效实现SSE服务端推送功能。

标签: ssephp
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转。…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…