danilopolani / twitch-pub-sub
集成 Twitch PubSub WebSocket 至 Laravel
Requires
- php: ^7.4|^8.0
- ext-json: *
- ext-pcntl: *
- amphp/websocket-client: ^1.0
- illuminate/contracts: ^8.0
- illuminate/events: ^8.0
- illuminate/support: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-29 05:22:32 UTC
README
Laravel Twitch PubSub
在 Laravel 应用程序中连接到 Twitch PubSub (WebSocket),在接收到特定主题的消息时触发 事件。
使用 Amphp with Web Socket 构建。
目录
入门
该包支持 Laravel 8.x
和 PHP >= 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 包模板 生成的。