删除未订阅的订阅

remove unsubscribed subscriptions

我正在使用 lighthouse-php 进行 GraphQL 订阅,我收到了来自推送器的消息。

所以我有订阅取消订阅的问题。

服务器端=>推送器=>前端

文档这部分意味着停止 pusher => 前端。 如果我不删除 redis,服务器端仍然可以工作并将消息推送到推送器,对吗?

  unsubscribeFromChannel(subscriptionChannel) {
    this.pusher.unsubscribe(subscriptionChannel);
  }

我也想停止 服务器端 => 推送器 。 我有哪些选择?

谢谢

这在 Lighthouse 文档中有记载,直接 link 这里:https://lighthouse-php.com/5/subscriptions/getting-started.html#expiring-subscriptions.

但这里也有一些片段,以防万一。

Subscriptions do not expire by themselves. Unless you delete a subscription, it will continue to broadcast events after the client has disconnected.

The easiest way to expire subscriptions automatically is to use the env LIGHTHOUSE_SUBSCRIPTION_STORAGE_TTL to set an expiration time in seconds (e.g. LIGHTHOUSE_SUBSCRIPTION_STORAGE_TTL=3600 to expire in one hour).

因此,设置此 .env 变量是使自动留下的订阅过期的好方法,请将此超时设置得足够大,如果您有很多 运行 长的订阅,一个小时可能不够。

但是由于您使用的是 Pusher,所以有一种更快的方法来清理订阅:

If you are using the Pusher driver, you can use a Presence webhook to mitigate this problem. When a Pusher channel is abandoned (ie. unsubscribed), it will trigger the webhook, which will instruct Lighthouse to delete the subscription.

这个 webhook(Pusher 调用它们的通道存在 webhook)将删除腾出的频道的订阅(没有订阅者离开)这将在用户断开连接后几秒钟发生,将订阅保留在 Redis up-to-date。


长话短说,为订阅设置一个 TTL 作为后备,并为您的应用配置 Pusher webhook。这将保留订阅存储 up-to-date 并防止不必要的工作。