android - 是否可以检查(服务器端)是否占用了 laravel-websockets 通道?
问题描述
我正在使用 Laravel-Websockets 将事件发送到 android-devices。要发送一个事件,我正在触发 laravel 事件,例如
event(new ExampleEvent($message, $channel));
$channel 定义了广播事件的频道名。一个频道仅适用于一个设备。所以最多有一个设备在监听一个频道。
在我的 webapp 上,我想显示哪些 android 设备在线。我的想法是检查特定设备的通道是否被占用。
是否可以检查通道是否被占用?
解决方案
使用 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
推荐阅读
- reactjs - 在 React Native Expo 中使用 react-redux 更改另一个键的值
- python - 无法使用 pyenv 正确设置 python
- java - 设置 MessageDialog 的图标会导致问题
- list - 在java中合并2个对象列表
- javascript - 错误:元素类型无效:在 React js 中需要一个字符串(用于内置组件)
- python - discord.py 中的语音通道限制
- python - 如何在关键字参数之后将参数传递给 *args
- node.js - 模式实例化后如何使猫鼬模式属性唯一(已包含数据)
- python - Python列表中的多种数字格式
- reactjs - 我尝试使用 react 中的 useHistory 钩子,但它不起作用;