thekonz / lighthouse-redis-broadcaster
一个用于与laravel-echo-server一起使用的laravel-php redis广播器。
Requires
- php: >=7.2
- ext-json: *
- illuminate/broadcasting: ^7.7
- illuminate/cache: ^7.7
- illuminate/console: ^7.7
- illuminate/redis: ^7.7
- illuminate/support: ^7.7
- nuwave/lighthouse: ^4
Requires (Dev)
- laravel/framework: ^7.7
- mockery/mockery: ^1.3
- phpunit/phpunit: ^8
This package is auto-updated.
Last update: 2021-03-03 11:08:42 UTC
README
Lighthouse 已支持pusher,但没有提供基于redis的解决方案。此包允许使用laravel-echo-server的presence channels进行graphql订阅。
对于客户端解决方案,请查看 Apollo Lighthouse Subscription Link。
安装
我假设您已经安装了 Lighthouse 和 laravel-echo-server。如果没有,请在继续之前检查它们的安装步骤。
使用composer安装包
composer require thekonz/lighthouse-redis-broadcaster
在 config/app.php
中添加服务提供者,在Lighthouse订阅服务提供者之后
/* * Package Service Providers... */ \Nuwave\Lighthouse\Subscriptions\SubscriptionServiceProvider::class, \thekonz\LighthouseRedisBroadcaster\SubscriptionServiceProvider::class,
将此添加到您的 .env
LIGHTHOUSE_BROADCASTER=redis
REDIS_PREFIX=
如果您没有将 REDIS_PREFIX
设置为空,则默认为 <app name>_database_
(默认: laravel_database_
),并且所有redis频道都将以它为前缀。
设置自动删除订阅频道
Lighthouse默认不会删除空频道。为了防止redis始终内存不足,您需要配置laravel-echo-server以发布其presence channel的更新,并运行一个订阅者以从redis中删除空频道。
在您的 laravel-echo-server.json
中启用presence channel更新,将 publishPresence
设置为 true
"databaseConfig": { ... "publishPresence": true }
运行订阅命令以删除空频道
php artisan lighthouse:subscribe
用法
如果您使用Apollo,请使用 Apollo Lighthouse Subscription Link。
如 Lighthouse文档 中所述创建一个订阅。为了演示目的,我假设订阅是像文档中的 postUpdated
一样。
现在查询API
subscription test { postUpdated { id title } }
响应将是
{ "data": { "postUpdated": null }, "extensions": { "lighthouse_subscriptions": { "version": 1, "channels": { "test": "private-lighthouse-9RrjQE84nqaxXt58ZsgREPaI9AxGjAv4-1588101712" } } } }
现在您可以使用laravel echo以presence channel的形式监视订阅
Echo.join( "private-lighthouse-9RrjQE84nqaxXt58ZsgREPaI9AxGjAv4-1588101712" ).listen(".lighthouse.subscription", ({ channel, data }) => { console.log(channel); // private-lighthouse-9RrjQE84nqaxXt58ZsgREPaI9AxGjAv4-1588101712 console.log(data); // { postUpdated: { id: 1, title: "New title" } } });
贡献和问题
请随时使用 develop
分支上的问题系统和拉取请求为此包做出贡献。
必须添加或更改自动化单元测试以覆盖您的更改或重现错误。