php实现推送
PHP 实现推送的方法
使用 PHP 实现推送功能可以通过多种方式实现,包括服务器推送(Server-Sent Events)、WebSocket、长轮询(Long Polling)或第三方推送服务(如 Firebase Cloud Messaging)。以下是几种常见的方法:
服务器推送(Server-Sent Events, SSE)
SSE 是一种基于 HTTP 的轻量级推送技术,适合单向服务器到客户端的消息推送。
// PHP 服务器端代码
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
while (true) {
$data = json_encode(['message' => 'New update']);
echo "data: {$data}\n\n";
ob_flush();
flush();
sleep(1);
}
客户端 JavaScript 代码:
const eventSource = new EventSource('sse.php');
eventSource.onmessage = function(e) {
console.log(e.data);
};
WebSocket 实现
WebSocket 提供全双工通信,适合实时性要求高的场景。可以使用 Ratchet 等 PHP 库实现 WebSocket 服务器。
安装 Ratchet:

composer require cboden/ratchet
WebSocket 服务器代码:
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class MyWebSocket implements MessageComponentInterface {
public function onOpen(ConnectionInterface $conn) {
echo "New connection: {$conn->resourceId}\n";
}
public function onMessage(ConnectionInterface $conn, $msg) {
$conn->send("Received: $msg");
}
public function onClose(ConnectionInterface $conn) {
echo "Connection closed: {$conn->resourceId}\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "Error: {$e->getMessage()}\n";
$conn->close();
}
}
$server = new \Ratchet\App('localhost', 8080);
$server->route('/push', new MyWebSocket());
$server->run();
长轮询(Long Polling)
长轮询通过客户端发起请求,服务器在有新数据时返回响应。
PHP 服务器端代码:

$lastUpdate = $_GET['lastUpdate'] ?? 0;
while (true) {
$newData = checkForNewData($lastUpdate);
if ($newData) {
echo json_encode($newData);
break;
}
sleep(1);
}
客户端 JavaScript 代码:
function poll() {
fetch('poll.php?lastUpdate=' + lastUpdate)
.then(response => response.json())
.then(data => {
console.log(data);
poll();
});
}
poll();
第三方推送服务(如 Firebase Cloud Messaging)
使用 Firebase Cloud Messaging (FCM) 实现跨平台推送。
PHP 发送推送代码:
$url = 'https://fcm.googleapis.com/fcm/send';
$headers = [
'Authorization: key=YOUR_SERVER_KEY',
'Content-Type: application/json'
];
$data = [
'to' => '/topics/all',
'notification' => [
'title' => 'New Message',
'body' => 'Hello from PHP!'
]
];
$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);
echo $result;
注意事项
- 性能优化:SSE 和 WebSocket 适合高并发场景,长轮询适用于简单需求。
- 安全性:使用 HTTPS 确保数据传输安全,避免敏感信息泄露。
- 兼容性:SSE 不支持 IE,WebSocket 需要现代浏览器支持。
以上方法可根据具体需求选择,SSE 和 WebSocket 适合实时性要求高的场景,而长轮询和第三方推送服务适合简单或跨平台需求。





