当前位置:首页 > PHP

php实现推送消息推送消息

2026-04-02 21:52:55PHP

PHP 实现消息推送的方法

使用 WebSocket 实现实时推送

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。
在 PHP 中可以通过 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 = function(e) {
    console.log('Message received: ', e.data);
};

使用 Server-Sent Events (SSE)

SSE 是 HTML5 规范中的一部分,允许服务器向客户端推送数据:

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');

while(true) {
    $data = getNewData(); // 获取新数据
    echo "data: " . json_encode($data) . "\n\n";
    ob_flush();
    flush();
    sleep(1);
}

客户端接收代码:

const eventSource = new EventSource('sse.php');
eventSource.onmessage = function(e) {
    console.log('New message: ', e.data);
};

使用第三方推送服务

对于移动端推送,可以使用 Firebase Cloud Messaging (FCM) 或 Apple Push Notification Service (APNS):

FCM 推送示例:

$url = 'https://fcm.googleapis.com/fcm/send';
$serverKey = 'YOUR_SERVER_KEY';

$headers = [
    'Authorization: key=' . $serverKey,
    'Content-Type: application/json'
];

$data = [
    'to' => '/topics/all',
    'notification' => [
        'title' => 'New Message',
        'body' => 'You have a new 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);

使用长轮询技术

长轮询是传统轮询的改进版,服务器在有数据时才响应:

// 服务器端
$lastEventId = $_SERVER['HTTP_LAST_EVENT_ID'] ?? 0;
while(true) {
    $newData = checkForNewData($lastEventId);
    if($newData) {
        echo json_encode($newData);
        break;
    }
    usleep(500000); // 等待0.5秒
}

使用消息队列系统

对于大规模应用,可以结合 RabbitMQ 或 Redis 实现消息推送:

Redis 发布/订阅示例:

php实现推送消息推送消息

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 发布消息
$redis->publish('notification_channel', json_encode([
    'user_id' => 123,
    'message' => 'New notification'
]));

// 订阅端需要常驻运行
$redis->subscribe(['notification_channel'], function($redis, $channel, $message) {
    processNotification($message);
});

标签: 消息php
分享给朋友:

相关文章

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…

vue实现消息接收

vue实现消息接收

Vue 实现消息接收的方法 在 Vue 中实现消息接收通常涉及 WebSocket、EventBus 或第三方库(如 Socket.IO)。以下是几种常见的实现方式: 使用 WebSocket We…