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

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现上传

php实现上传

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

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…