我正在使用Laravel-Websockets向android设备发送事件。为了发送事件,我触发了laravel事件,比如
event(new ExampleEvent($message, $channel));并且$channel定义了用于广播事件的频道名。一个通道只适用于一个设备。因此最多有一个设备在监听一个通道。
在我的webapp上,我想要显示哪些android设备是在线的。我的想法是检查特定设备的通道是否被占用。
是否可以检查通道是否被占用?
发布于 2019-08-29 21:29:29
可以使用HTTP API找出频道是否有活动订阅(是否被占用)。您可以使用Get channels端点,如下所示。这将返回当前存在的频道的完整列表(因此已被占用)。
https://pusher.com/docs/channels/server_api/http-api#application-channels
您可以定期轮询此终结点,并存储在服务器上作为占用返回的通道列表。
最后,为了不需要频繁地轮询API,您可以通过设置一个通道存在事件webhook来接收自上次轮询API以来已被占用或空闲的通道的更新。您可以在帐户仪表板中的Channels应用程序的"webhooks“选项卡中执行此操作:
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
https://stackoverflow.com/questions/57709194
复制相似问题