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

订阅者代码示例:

php实现发布订阅

$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);
        }
    }
}

使用示例:

php实现发布订阅

$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 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUES…

php实现mvc

php实现mvc

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

php session实现购物车

php session实现购物车

PHP Session 实现购物车 初始化 Session 确保在使用 Session 前调用 session_start() 函数。通常放在 PHP 文件的最顶部。 <?php sessio…