当前位置:首页 > 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');

消费者代码:

php实现发布订阅

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

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php实现秒杀

php实现秒杀

PHP实现秒杀功能的关键技术 秒杀系统需要解决高并发、数据一致性、系统稳定性等问题。以下是PHP实现秒杀功能的核心技术方案: 数据库优化 使用InnoDB引擎的行级锁和事务特性,确保数据一致性。商品…

php实现扫码登录

php实现扫码登录

PHP 实现扫码登录的方案 扫码登录通常基于以下流程:用户访问网页生成二维码(含唯一标识),手机扫码后确认登录,服务器验证并完成登录状态同步。以下是具体实现方法: 生成二维码与唯一标识 使用 PHP…

php 实现长轮询

php 实现长轮询

PHP 实现长轮询的方法 长轮询(Long Polling)是一种服务器推送技术,客户端发送请求后,服务器保持连接开放直到有新数据或超时。以下是实现步骤: 基础实现代码 创建一个简单的长轮询 PHP…

php 自动登录实现

php 自动登录实现

自动登录的实现方法 PHP中实现自动登录通常涉及使用Cookie存储用户凭证,并在用户再次访问时自动验证。以下是几种常见的方法: 使用Cookie存储用户凭证 用户登录成功后,生成一个唯一的Tok…