当前位置:首页 > PHP

php 实现推送

2026-02-14 11:50:27PHP

使用 PHP 实现推送功能

服务器推送(Server-Sent Events, SSE)

SSE 是一种基于 HTTP 的轻量级推送技术,适用于单向数据推送场景(如实时通知)。

实现步骤:

  1. 创建 PHP 脚本(如 sse.php),设置响应头为 text/event-stream,并关闭缓存:

    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');
    header('Connection: keep-alive');
  2. 使用循环定期发送数据。示例发送时间戳:

    while (true) {
      $currentTime = date('H:i:s');
      echo "data: {$currentTime}\n\n";
      ob_flush();
      flush();
      sleep(1);
    }
  3. 前端通过 EventSource 接收:

    const source = new EventSource('sse.php');
    source.onmessage = (e) => {
      console.log(e.data);
    };

WebSocket 推送

适用于全双工通信场景(如聊天应用),需配合 WebSocket 服务器。

php   实现推送

实现步骤:

  1. 安装 WebSocket 库(如 Ratchet):

    composer require cboden/ratchet
  2. 创建 WebSocket 服务器脚本:

    use Ratchet\Server\IoServer;
    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;
    use MyApp\Chat; // 自定义处理类
    
    require dirname(__DIR__) . '/vendor/autoload.php';
    $server = IoServer::factory(
      new HttpServer(new WsServer(new Chat())),
      8080
    );
    $server->run();
  3. 客户端通过 JavaScript 连接:

    php   实现推送

    const socket = new WebSocket('ws://localhost:8080');
    socket.onmessage = (e) => {
      console.log(e.data);
    };

第三方推送服务(如 Firebase Cloud Messaging)

适用于移动端或跨平台推送。

实现步骤:

  1. 注册 Firebase 项目并获取服务器密钥。

  2. 通过 PHP 发送 HTTP 请求:

    $url = 'https://fcm.googleapis.com/fcm/send';
    $headers = [
      'Authorization: key=SERVER_KEY',
      'Content-Type: application/json'
    ];
    $data = [
      'to' => '/topics/all',
      'notification' => ['title' => 'Alert', 'body' => 'Test message']
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    $result = curl_exec($ch);
    curl_close($ch);

选择建议

  • SSE:适合简单实时数据(如股票价格)。
  • WebSocket:需双向交互时使用(如游戏、聊天)。
  • 第三方服务:需覆盖移动设备或无需自建服务器时使用。

标签: php
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现队列

php实现队列

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

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…