danilopolani/twitch-pub-sub

集成 Twitch PubSub WebSocket 至 Laravel

1.0.2 2021-03-28 20:07 UTC

This package is auto-updated.

Last update: 2024-09-29 05:22:32 UTC


README

Latest Version on Packagist Build Status


Laravel Twitch PubSub

在 Laravel 应用程序中连接到 Twitch PubSub (WebSocket),在接收到特定主题的消息时触发 事件

使用 Amphp with Web Socket 构建。

目录

  1. 入门
  2. 用法
  3. 变更日志
  4. 贡献
  5. 测试
  6. 安全
  7. 鸣谢
  8. 许可证

入门

该包支持 Laravel 8.xPHP >= 7.4

先决条件

需要 PHP 扩展 ext-pcntl

安装

您可以通过 composer 安装该包

composer require danilopolani/twitch-pub-sub

用法

该包依赖于一个主要函数

TwitchPubSub::run(string|array $twitchAuthToken, array $topics = [])

通常您会将包的主要函数放入一个 Artisan 命令 中。

use \Danilopolani\TwitchPubSub\Facades\TwitchPubSub;

/**
 * Execute the console command.
 *
 * @return mixed
 */
public function handle()
{
    TwitchPubSub::run('a1b2c3d4e5', ['whispers.44322889']);

    // Or the array syntax that support multiple users too
    TwitchPubSub::run([
        'a1b2c3d4e5' => ['whispers.44322889'],
        'f6g7h8j9k0' => ['channel-bits-events-v1.123456', 'channel-points-channel-v1.123456'],
    ]);
}

现在您可以从终端或工作进程运行您的命令。

您应该 绝对 设置 Supervisor 或类似工具以保持您的命令运行,并在出现问题时重新启动它。

最后,创建一个 监听器 来处理传入的事件。

// App\Providers\EventServiceProvider.php

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    \Danilopolani\TwitchPubSub\Events\WhisperReceived::class => [
        TrackMessages::class,
    ],
];

// Or with a closure
Event::listen(function (\Danilopolani\TwitchPubSub\Events\WhisperReceived $event) {
    dd($event->data);
});

主题 & 事件

重新连接

当连接关闭时,包本身将尝试重新连接,但这需要一个新的 访问令牌,此外我们 强烈建议 您处理 onClose 回调并退出您的脚本。这样,如果您的代码是这样编写的,在正确配置 Supervisor 的情况下,工作进程将自动重新启动并使用新的令牌重新连接。以下是一个简单的示例,展示了它应该如何工作

// App/Console/Commands/PubSub.php

public function handle()
{
    // A fresh Twitch Access Token
    $token = $user->getFreshAccessToken();
    
    TwitchPubSub::onClose(function (\Amp\Websocket\ClosedException $e) {
        exit(0);
    });
    
    TwitchPubSub::run($token, ['my-topic']);
}

当执行 exit(0) 时,脚本将停止,Supervisor 将重新启动它 - 再次调用 handle - 并刷新令牌以正确重新连接。
请参见下文了解更多有关回调的信息。

回调

当发生某些事件时,包会提供几个触发的回调。这些回调 必须放在 ::run() 方法之前才能正常工作。

// A message (anything, PING/PONG too for example) is received
TwitchPubSub::onMessage(function (array $payload) {
    dump('received message:', $payload);
});

// A generic error occurs
TwitchPubSub::onError(function (\Exception $e) {
    dump('generic error:', $e->getMessage());
});

// The connection has been closed
// This could triggered from a SIGINT or SIGTERM too (stopping the script, restarting the worker etc.)
TwitchPubSub::onClose(function (\Amp\Websocket\ClosedException $e) {
    dump('connection closed, reason:', $e->getMessage());
});

// An error occurred in a Listener after the event has been dispatched
TwitchPubSub::onDispatchError(function (string $event, array $payload, Throwable $e) {
    dump('error for event', $event, $payload, $e->getMessage());
});

// Runner
TwitchPubSub::run('a1b2c3d4e5', ['whispers.44322889']);

变更日志

请参阅 变更日志 了解最近更改了什么。

贡献

请参阅 贡献 了解详细信息。

测试

克隆仓库并运行

composer test

使用 Docker (Windows)

docker run --rm -v %cd%:/app composer:2 bash -c "cd /app && composer install --ignore-platform-reqs && ./vendor/bin/phpunit"

使用 Docker (Linux/OSX)

docker run --rm -v $(pwd):/app composer:2 bash -c "cd /app && composer install --ignore-platform-reqs && ./vendor/bin/phpunit"

安全

如果您发现任何与安全相关的问题,请通过电子邮件 danilo.polani@gmail.com 而不是使用问题跟踪器。

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件

Laravel 包模板

此包是使用 Laravel 包模板 生成的。