php 实现推送
使用 PHP 实现推送功能
服务器推送(Server-Sent Events, SSE)
SSE 是一种基于 HTTP 的轻量级推送技术,适用于单向数据推送场景(如实时通知)。
实现步骤:
-
创建 PHP 脚本(如
sse.php),设置响应头为text/event-stream,并关闭缓存:header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); header('Connection: keep-alive'); -
使用循环定期发送数据。示例发送时间戳:
while (true) { $currentTime = date('H:i:s'); echo "data: {$currentTime}\n\n"; ob_flush(); flush(); sleep(1); } -
前端通过
EventSource接收:const source = new EventSource('sse.php'); source.onmessage = (e) => { console.log(e.data); };
WebSocket 推送
适用于全双工通信场景(如聊天应用),需配合 WebSocket 服务器。

实现步骤:
-
安装 WebSocket 库(如
Ratchet):composer require cboden/ratchet -
创建 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(); -
客户端通过 JavaScript 连接:

const socket = new WebSocket('ws://localhost:8080'); socket.onmessage = (e) => { console.log(e.data); };
第三方推送服务(如 Firebase Cloud Messaging)
适用于移动端或跨平台推送。
实现步骤:
-
注册 Firebase 项目并获取服务器密钥。
-
通过 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:需双向交互时使用(如游戏、聊天)。
- 第三方服务:需覆盖移动设备或无需自建服务器时使用。






