如何判断是否存在广播频道及其用户计数?
我们有一个产品链接,一些铬页标签正在订阅一个广播频道。想看看有多少人在听。
const bc = new window.BroadcastChannel('channel_name');资源:
Communication between tabs or windows
使用角型语言环境,它可能有一个库功能。
发布于 2020-08-08 09:51:49
没有内置的方法来获取通过同一个BroadcastChannel连接的活动端口的计数。
您可以自己设置一些东西,例如使用一些using方法,在这种方法中,所有端口都会响应,而请求者只需在给定的时间内计算响应,但这有点麻烦,使得所有事情都是异步的,实际上只使用LocalStorage进行计数似乎是最简单的方法。
您可以在localStorage中保存您将要打开的每个通道的当前计数。
在每个新连接之前,页面只需检查该值,因为它将在可以通过BroadcastChannel进行通信的上下文中共享。
const active_connections = localStorage[ channel_name ] || 0;然后,当连接时,它只需更新该值。
if( active_connections < max_count ) {
const channel = new BroadcastChannel( channel_name );
localStorage[ channel_name ] = active_connections + 1;
}当通道关闭时,最棘手的是减少这个计数。为此,您需要连接到beforeunload事件:
addEventListener( 'beforeunload', (evt) => {
localStorage[ channel_name ] --;
} );请注意,如果您的代码确实调用了channel.close(),那么您应该添加一行来更新其中的计数,并禁用在卸载之前的一行。
(您仍然可以以点击的方式运行,以确保计数仍然正确,例如,如果页面崩溃,卸载前可能不会触发)。
我应该指出,我不明白你为什么要做这样的事情,也许你的设计中有些东西是错的,你应该反复检查它,也许还会有一个新的问题)
https://stackoverflow.com/questions/63313526
复制相似问题