Javascript:获取BroadcastChannel订阅服务器计数



如何判断广播频道是否存在及其订户数?

我们有一个产品链接,一些chrome页面标签正在订阅广播频道。想看看有多少人在听。

const bc = new window.BroadcastChannel('channel_name');

资源:

https://medium.com/javascript-in-plain-english/using-javascript-and-the-broadcast-channel-api-a3134739781d

选项卡或窗口之间的通信

使用Angular Typescript环境,也许它有一个库函数

没有内置的方法来获取通过同一BroadcastChannel连接的活动端口的计数。

你可以自己设置一些东西,例如使用一些ping方法,所有端口都会响应,询问者只需要在给定的时间内计数响应,但这有点麻烦,会使所有事情都异步,实际上只使用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(),那么您也应该添加一行来更新那里的计数,并禁用beforeunload

(您仍然可以运行ping方式来确保计数仍然正确,因为例如,如果页面崩溃,beforeunload可能不会触发(。


我应该注意的是,我不明白你为什么需要做这样的事情,可能你的设计中出现了问题,你应该仔细检查一下,也许会提出一个新的问题(

最新更新