当前位置:首页 > PHP

php实现发布订阅

2026-01-30 06:53:48PHP

发布订阅模式简介

发布订阅(Pub/Sub)是一种消息通信模式,允许发布者将消息发送到频道,订阅者接收来自频道的消息,两者无需直接交互。PHP可通过扩展库或自定义代码实现这一模式。

使用 Redis 实现

Redis 原生支持发布订阅功能,PHP可通过 phpredispredis 扩展库操作:

安装 Redis 扩展(以 phpredis 为例):

pecl install redis

发布者代码示例:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->publish('channel_name', 'Message content');

订阅者代码示例:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->subscribe(['channel_name'], function ($redis, $channel, $message) {
    echo "Received: {$message} from {$channel}\n";
});

自定义事件系统

通过 PHP 类和接口实现简单的发布订阅逻辑:

定义事件管理器:

class EventManager {
    private $subscribers = [];

    public function subscribe(string $event, callable $callback) {
        $this->subscribers[$event][] = $callback;
    }

    public function publish(string $event, $data = null) {
        foreach ($this->subscribers[$event] ?? [] as $callback) {
            $callback($data);
        }
    }
}

使用示例:

$eventManager = new EventManager();
$eventManager->subscribe('user_created', function ($user) {
    echo "User created: {$user}\n";
});
$eventManager->publish('user_created', 'Alice');

使用消息队列(如 RabbitMQ)

通过 AMQP 扩展实现更复杂的发布订阅场景:

安装 AMQP 扩展:

pecl install amqp

生产者代码:

$connection = new AMQPConnection(['host' => 'localhost']);
$connection->connect();
$channel = new AMQPChannel($connection);
$exchange = new AMQPExchange($channel);
$exchange->publish('Message content', 'routing_key');

消费者代码:

$connection = new AMQPConnection(['host' => 'localhost']);
$connection->connect();
$channel = new AMQPChannel($connection);
$queue = new AMQPQueue($channel);
$queue->bind('exchange_name', 'routing_key');
$queue->consume(function (AMQPEnvelope $envelope) {
    echo $envelope->getBody();
});

性能与场景建议

  • Redis:适合轻量级、高并发的实时场景。
  • 自定义事件:适用于单机应用解耦模块。
  • RabbitMQ:需要持久化、复杂路由时使用。

根据实际需求选择方案,注意错误处理与资源释放。

php实现发布订阅

标签: php
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现socket

php实现socket

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

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…