thekonz/lighthouse-redis-broadcaster

此包已被废弃且不再维护。未建议替代包。

一个用于与laravel-echo-server一起使用的laravel-php redis广播器。

1.0.1 2020-05-16 16:58 UTC

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

安装

我假设您已经安装了 Lighthouselaravel-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 分支上的问题系统和拉取请求为此包做出贡献。

必须添加或更改自动化单元测试以覆盖您的更改或重现错误。