当前位置:首页 > PHP

php实现推送

2026-04-02 20:51:58PHP

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:

php实现推送

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 服务器端代码:

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 适合实时性要求高的场景,而长轮询和第三方推送服务适合简单或跨平台需求。

标签: php
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php 伪静态实现

php 伪静态实现

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