是否可以检查(服务器端)是否占用了 laravel-websockets 通道?
Posted
技术标签:
【中文标题】是否可以检查(服务器端)是否占用了 laravel-websockets 通道?【英文标题】:Is it possible to check (serverside) if a laravel-websockets channel is ocupied? 【发布时间】:2020-01-02 16:08:17 【问题描述】:我正在使用 Laravel-Websockets 将事件发送到 android-devices。 要发送事件,我会触发类似
的 laravel 事件event(new ExampleEvent($message, $channel));
$channel 定义了广播事件的频道名称。一个频道仅适用于一个设备。所以最多有一个设备在监听一个频道。
在我的 webapp 上,我想显示哪些 Android 设备在线。我的想法是检查特定设备的频道是否被占用。
是否可以检查频道是否被占用?
【问题讨论】:
在同样的情况下。你找到解决问题的办法了吗? 【参考方案1】:可以使用 HTTP API 查明频道是否有活动订阅(被占用)。您可以使用 Get channels 端点,如下面的链接所示。这将返回当前存在的频道的完整列表(因此被占用)。
https://pusher.com/docs/channels/server_api/http-api#application-channels
您可以定期轮询此端点并将返回的频道列表存储在您的服务器上。
最后,您无需过于频繁地轮询 API,您可以通过设置频道存在事件 webhook 接收自上次轮询 API 以来已被占用或腾出的频道的更新。这可以通过您帐户仪表板中频道应用的“网络钩子”标签来完成:
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
【讨论】:
如果我使用的是 pusher-server,这可以工作,但是如果我使用我的自托管 laravel-websockets 服务器,这是否也可以工作?以上是关于是否可以检查(服务器端)是否占用了 laravel-websockets 通道?的主要内容,如果未能解决你的问题,请参考以下文章