sevenlinx / pubsub-php
Seven LinX Tech 的 PHP PubSub
dev-main / 1.x-dev
2021-04-22 15:53 UTC
Requires
- php: ^8.0
Requires (Dev)
- mockery/mockery: ^1.4
- phpstan/phpstan: ^0.12.83
- phpstan/phpstan-mockery: ^0.12.13
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-22 23:38:22 UTC
README
要求
- PHP
^8.0
安装
composer require sevenlinx/pubsub-php
驱动
使用 \SevenLinX\PubSub\PubSubDriverInterface
实现自己的驱动
示例
use SevenLinX\PubSub\Contracts\ChannelContract; use SevenLinX\PubSub\Contracts\HasPriorityHandler; use SevenLinX\PubSub\Contracts\MessageContract; use SevenLinX\PubSub\PubSubDriverInterface; final class MyOwnPubSubDriver implements PubSubDriverInterface { public function publish(ChannelContract $channel, MessageContract $message): void { // How to publish message } public function publishBatch(ChannelContract $channel, MessageContract ...$messages): void { // The usual loop foreach ($messages as $message) { $this->publish($channel, $message); } } public function subscribe(ChannelContract $channel, callable $handler): void { // What to do when someone publish a message. } }
订阅
订阅消息。
示例
$driver = new MyOwnPubSubDriver(); $channel = new MyOwnChannel(); // Using anonymous function $driver->subscribe($channel, function ($message) { // Do whatever you want. }); // Using class with __invoke method $driver->subscribe($channel, new MyOwnHandler());
发布
发布单个消息
示例
... $driver->publish($channel, new MyOwnMessage());
您也可以批量发布多个消息
... $driver->publishBatch($channel, new MyOwnMessage(), new MyOtherMessage(), new GenericMessage());
负载
您可以通过实现 \SevenLinX\PubSub\Contracts\PayloadContract
创建自己的负载
示例
use SevenLinX\PubSub\Contracts\PayloadContract; final class Payload implements PayloadContract { public function __construct(private string $message) { } public function getChannel() : string { return 'channel'; } public function payload() : mixed { return serialize($this->message); } }
您可以将这个负载传递给您的 callable
处理器
use SevenLinX\PubSub\Contracts\ChannelContract; ... public function subscribe(ChannelContract $channel, callable $handler): void { $handler(new Payload('message')); }
泛型
您可以使用泛型为频道、消息和负载
use SevenLinX\PubSub\Generics\GenericChannel;use SevenLinX\PubSub\Generics\GenericMessage; ... $driver->publish(new GenericChannel('my-own-channel'), new GenericMessage('my-own-message')); //
示例
您可以在 example/
目录中的示例或运行
php example/example.php
测试
只需运行
composer run testing