php实现推送消息推送
PHP 实现消息推送的方法
使用 WebSocket 实时推送
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。
安装 Ratchet 库(PHP WebSocket 库):
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 连接 WebSocket:
const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = function(event) {
console.log('Message received:', event.data);
};
使用 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 接收 SSE:
const eventSource = new EventSource('sse.php');
eventSource.onmessage = function(event) {
console.log('Update:', event.data);
};
使用第三方推送服务(如 Firebase Cloud Messaging)
集成 Firebase Cloud Messaging (FCM) 实现跨平台推送。
安装 Firebase PHP SDK:
composer require kreait/firebase-php
发送推送消息:

use Kreait\Firebase\Factory;
use Kreait\Firebase\Messaging\CloudMessage;
$factory = (new Factory)->withServiceAccount('path/to/firebase-credentials.json');
$messaging = $factory->createMessaging();
$message = CloudMessage::withTarget('token', 'device_token')
->withNotification(['title' => 'Hello', 'body' => 'This is a test message']);
$messaging->send($message);
使用长轮询(Long Polling)
客户端发送请求后,服务器保持连接直到有新数据才响应。
PHP 长轮询示例:
$timeout = 30;
$startTime = time();
while (time() - $startTime < $timeout) {
$newData = checkForNewData(); // 自定义检查新数据的逻辑
if ($newData) {
echo json_encode($newData);
exit;
}
sleep(1);
}
echo json_encode([]);
使用 MQTT 协议
MQTT 是轻量级的发布/订阅消息协议,适合 IoT 或低带宽场景。
安装 PHP MQTT 客户端:
composer require bluerhinos/phpmqtt
发布消息示例:
require('phpMQTT.php');
$mqtt = new phpMQTT('broker.example.com', 1883, 'phpClient');
if ($mqtt->connect()) {
$mqtt->publish('topic', 'Hello MQTT', 0);
$mqtt->close();
}
注意事项
- 性能优化:WebSocket 和 SSE 适合高并发场景,长轮询次之。
- 安全性:使用
wss://加密 WebSocket 连接,避免敏感数据泄露。 - 兼容性:SSE 不支持 IE,需 Polyfill 或降级方案。
- 第三方服务:FCM 需配置 Google 服务账户,MQTT 需部署 Broker 服务器。






