sevenlinx/pubsub-php

Seven LinX Tech 的 PHP PubSub

dev-main / 1.x-dev 2021-04-22 15:53 UTC

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
Seven LinX Incorporated 创建