首页 > 解决方案 > 是否可以检查(服务器端)是否占用了 laravel-websockets 通道?

问题描述

我正在使用 Laravel-Websockets 将事件发送到 android-devices。要发送一个事件,我正在触发 laravel 事件,例如

event(new ExampleEvent($message, $channel));

$channel 定义了广播事件的频道名。一个频道仅适用于一个设备。所以最多有一个设备在监听一个频道。

在我的 webapp 上,我想显示哪些 android 设备在线。我的想法是检查特定设备的通道是否被占用。

是否可以检查通道是否被占用?

标签: androidlaravelwebsocketchannelpusher

解决方案


使用 HTTP API 可以查明频道是否有活动订阅(被占用)。您可以使用 Get channels 端点,如下面的链接所示。这将返回当前存在的频道的完整列表(因此被占用)。

https://pusher.com/docs/channels/server_api/http-api#application-channels

您可以定期轮询此端点并将返回的频道列表存储在您的服务器上被占用。

最后,您不需要过于频繁地轮询 API,您可以通过设置通道存在事件 webhook 接收自上次轮询 API 以来已被占用或腾出的通道的更新。这可以通过帐户仪表板中频道应用程序的“webhook”选项卡完成:

https://pusher.com/docs/channels/server_api/webhooks

a) 当一个频道从 0 个订阅者变为 1 个订阅者时,它将开始存在并且 channel_occupied webhook 将被触发。您可以在您的服务器上捕获此事件并将其添加到您的已占用频道列表中。

https://pusher.com/docs/channels/server_api/webhooks#channel-occupied

b) 当频道从至少有 1 个订阅者变为 0 个订阅者时,该频道将不复存在,您将收到一个 channel_vacated 事件。您可以从已占用频道列表中删除已腾出的频道:

https://pusher.com/docs/channels/server_api/webhooks#channel-vacated


推荐阅读