实时通信利器:Web Broadcast Channel API 全面解读

news2024/12/22 16:30:53

一. 引言

在 Web 开发领域,实时通信一直是一个备受关注的话题。为了更好地实现实时消息传递和跨标签页通信,在 HTML5 规范中引入了 Web Broadcast Channel API。在本文中,我们将解析 Web Broadcast Channel API,探讨其用法以及相关应用场景。

Web Broadcast Channel API 的知识点概览如下图所示:

fileOf7174.png

fileOf7174.png

二. 什么是 Web Broadcast Channel API?

Web Broadcast Channel API 是 HTML5 规范中定义的一种用于实现跨文档消息传递的 API。它提供了一种可以在不同标签页或者同一标签页中的不同上下文之间进行通信的机制。

1. 特点和能力

Web Broadcast Channel API 具有以下特点和能力:

  1. 广播消息:可以向一个频道中广播(发布)消息,所有订阅了这个频道的页面或者线程都能收到消息。

  2. 实时通信:支持实时的消息传递,可以在消息发送时即时收到。

  3. 多标签页通信:不同标签页之间可以进行消息传递,从而实现了跨标签页通信。

  4. 异步传输:消息的传输是异步的,发送消息和接收消息是非阻塞的,并且可以进行并行处理。

  5. 简洁易用:API 提供了简单易用的方法来创建频道、发送消息以及监听消息,使得开发者能够轻松实现基于广播频道的消息传递功能。

2. 能做什么?

Web Broadcast Channel API 可以被用于许多实际应用场景,例如:

  1. 实时聊天:可以在网页应用中实现实时聊天功能,多个用户在不同页面之间进行实时通信。

  2. 数据共享:实现不同页面之间共享数据的需求,当一个页面更新数据时,其他页面也能实时获取到更新的信息。

  3. 协作编辑:多个用户协同编辑同一份文档,在不同的页面中看到其他用户的实时编辑内容。

  4. 多页面互动:可以利用 Broadcast Channel API 在不同页面之间传递事件、指令等,实现多页面之间的交互。

总的来说,Web Broadcast Channel API 提供了一种强大的实时通信机制,使得网页应用能够更好地实现多页面或者多组件之间的实时通信和协作,为开发者提供了更丰富的交互体验和功能扩展空间。

三. Web Broadcast Channel API 的核心概念

Web Broadcast Channel API 的核心概念包括 BroadcastChannel 对象、postMessage() 方法和 message 事件。

  1. BroadcastChannel 对象:通过 BroadcastChannel 对象可以创建一个新的广播频道,用于实现消息的发布和订阅。一个 BroadcastChannel 对象代表了一个通信频道。

  2. postMessage() 方法:postMessage() 方法用于向广播频道发送消息,通过该方法发送的消息会被所有订阅了该频道的对象接收到。

  3. message 事件:当有新消息到达广播频道时,这个频道会触发 message 事件,开发者可以监听该事件来获取新消息并做出相应处理。

接下来,我将通过代码示例来演示如何使用 Web Broadcast Channel API:

// 创建一个新的 BroadcastChannel 对象,指定频道名称为 "myChannel"
const channel = new BroadcastChannel("myChannel");

// 监听 message 事件,当有新消息到达时执行回调函数
channel.onmessage = function (event) {
  // 在控制台打印接收到的消息内容
  console.log("Received message: " + event.data);
};

// 发送消息到频道 "myChannel"
channel.postMessage("Hello, this is a message from sender.");

// 关闭频道,释放资源
channel.close();

在上面的代码示例中,首先我们创建了一个名为 "myChannel" 的广播频道,并定义了一个监听该频道的 message 事件的回调函数。然后我们使用 postMessage() 方法向该频道发送了一条消息。最后,我们调用了 channel.close() 方法来关闭频道,释放资源。

通过以上示例,您可以了解如何使用 Web Broadcast Channel API 来实现实时消息传递功能。您可以根据具体需求,灵活运用这些核心概念来构建您自己的应用程序。

四. 实际应用

Broadcast Channel API 允许从同源的不同浏览上下文进行消息或数据的通信。其中,浏览上下文指的是窗口、选项卡、iframe、worker 等。

BroadcastChannel  类用于创建或加入频道:

const politicsChannel = new BroadcastChannel("politics")

politics  是频道的名称,任何使用  politics  始化  BroadcastChannel  构造函数的上下文都将加入  politics  频道,它将接收在频道上发送的任何消息,并可以将消息发送到频道中。

如果它是第一个具有  politics  的  BroadcastChannel  构造函数,则将创建该频道。可以使用  BroadcastChannel.postMessage API  来将消息发布到频道。使用  BroadcastChannel.onmessage API 要订阅频道消息。

下面来看一个简单的聊天应用:

<body>
  <header>
    <h2>Web APIs<h2>
   </header>
   <div class="web-api-cnt">
       <div class="web-api-card">
          <div class="web-api-card-head">
            Demo - BroadcastChannel
          </div>
          <div class="web-api-card-body">
            <div class="page-info">Open this page in another <i>tab</i>, <i>window</i> or <i>iframe</i> to chat with them.</div>
            <div id="error" class="close"></div>
            <div id="displayMsg" style="font-size:19px;text-align:left;">
            </div>
            <div class="chatArea">
              <input id="input" type="text" placeholder="Type your message" />
              <button onclick="sendMsg()">Send Msg to Channel</button>
            </div>
          </div>
        </div> 
    </div>
</body>
<script>
      const l = console.log;
      try {
        var politicsChannel = new BroadcastChannel("politics")
        politicsChannel.onmessage = onMessage
        var userId = Date.now()
        } catch(e) {
          error.innerHTML = "BroadcastChannel API not supported in this device."
          error.classList.remove("close")
        }
      
      input.addEventListener("keydown", (e) => {
        if(e.keyCode === 13 && e.target.value.trim().length > 0) {
          sendMsg()            
        }
      })
      
      function onMessage(e) {     
        const {msg,id}=e.data   
        const newHTML = "<div class='chat-msg'><span><i>"+id+"</i>: "+msg+"</span></div>"
        displayMsg.innerHTML = displayMsg.innerHTML + newHTML
        displayMsg.scrollTop = displayMsg.scrollHeight
      }
      
      function sendMsg() {
        politicsChannel.postMessage({msg:input.value,id:userId})
        
        const newHTML = "<div class='chat-msg'><span><i>Me</i>: "+input.value+"</span></div>"
        displayMsg.innerHTML = displayMsg.innerHTML + newHTML
        
        input.value = ""
        
        displayMsg.scrollTop = displayMsg.scrollHeight
      }   
</script>

这里有一个简单的文本和按钮。输入消息,然后按按钮发送消息。下面初始化了politicalChannel,并在  politicalChannel  上设置了一个  onmessage  事件监听器,这样它就可以接收和显示消息。

fileOf7174.png

fileOf7174.png

点击按钮就会调用sendMsg  函数。它通过  BroadcastChannel#postMessage API 将消息发送到  politics  频道。任何初始化此脚本的选项卡、iframe 或工作程序都将接收从此处发送的消息,因此此页面将接收从其他上下文发送的消息。

五. 总结

Web Broadcast Channel API 是 HTML5 规范中定义的一种跨标签页通信的机制,它的核心概念包括。

  • BroadcastChannel 对象

  • postMessage() 方法

  • message 事件

Web Broadcast Channel API 提供了一种简单而强大的方式来实现不同页面之间或同一页面内不同组件之间的实时消息传递,为开发者们提供了更灵活的通信方式。开发者可以利用这一 API 构建实时通信功能,如实时聊天、共享数据等。通过合理运用 BroadcastChannel 对象、postMessage() 方法和 message 事件,可以实现更灵活、交互性更强的 Web 应用程序。

通过本文的介绍,我们深了解了 Web Broadcast Channel API 的原理、用法和应用场景。Web Broadcast Channel API 为 Web 开发者提供了一种高效、简单的实时通信方式,极大地拓展了 Web 应用的可能性。开发者可以根据自身需求,灵活运用 Web Broadcast Channel API,构建出更加丰富和具有实时性的 Web 应用程序。

相关资源:

  • 示例代码: https://web-api-examples.github.io/broadcastchannel.html

  • Web Broadcast Channel API 文档: https://developer.mozilla.org/zh-CN/docs/Web/API/Broadcast_Channel_API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见的正则化方法以及L1,L2正则化的简单描述

深度学习中的正则化是通过在模型训练过程中引入某些技术来防止模型过拟合的一种策略。过拟合是指模型在训练数据上表现非常好&#xff0c;但在新的、未见过的数据上表现不佳。正则化通过限制模型的复杂度或对模型参数施加约束&#xff0c;从而提高模型的泛化能力。 常见的正则…

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络&#xff08;Gaussian Network&#xff09;通常指的是一个概率图模型&#xff0c;其中所有的随机变量&#xff08;或节点&#xff09;都遵循高斯分布 文章目录 引言一、高斯网络&#xff08;Gaussian Network&#xff09;1.1 高斯过程&#xff08;Gaussian Proces…

Notepad++ 修改 About

1. 用这个工具&#xff0c;看标题&#xff0c;修改 1700 里的 Caption, 保存为 xx.exe, 2.修改链接&#xff0c;先准备如上。 2.1 使用插件 Hex Editor&#xff0c;拖入刚保存的 Notepad.exe 到 Notepad.exe, 按 c..S..H 2.2 按 ctrlf 查找 68 00 74 00 74 00 70 00 73 00 3…

ggplot作图基础

目录 ggplot作图语法 散点图 折线图 group分组 face_wrap()图像切片摆放 facet_grid()交叉分组切片 条形图 2.1 单组变量条形图 2.2 多维展示变量 直方图有与密度估计 直方图 密度估计图 ..density..语法和stat“density” ggplot作图语法 ggplot作图是将数据按需要进…

锡林郭勒奶酪品牌呼和浩特市大召店盛大开业

礼献中秋&#xff0c;香飘乳都。为进一步拓展锡林郭勒奶酪区域公用品牌产品销售渠道&#xff0c;9月8日&#xff0c;锡林郭勒奶酪区域公用品牌大召店在呼和浩特市大召广场月明楼隆重开业&#xff0c;现场为第三批新授权的39家奶酪生产经营主体代表授牌。至此&#xff0c;锡林郭…

Debian 12如何关闭防火墙

在Debian 12中&#xff0c;默认的防火墙管理工具是ufw&#xff08;Uncomplicated Firewall&#xff09;。您可以使用以下命令来关闭防火墙&#xff1a; 关闭防火墙&#xff1a; sudo ufw disable查看防火墙状态&#xff1a; sudo ufw status如果需要重新开启防火墙&#xff1a;…

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后&#xff0c;将用户信息存储在记录在 localStorage中&#xff0c;然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上&#xff0c;并且头像设置跳转&#xff0c;到个人资料界面 这里数据库中还没有设置相关信息 2.模糊…

数学建模笔记—— 主成分分析(PCA)

数学建模笔记—— 主成分分析 主成分分析1. 基本原理1.1 主成分分析方法1.2 数据降维1.3 主成分分析原理1.4 主成分分析思想 2. PCA的计算步骤3. 典型例题4. 主成分分析说明5. python代码实现 主成分分析 1. 基本原理 在实际问题研究中,多变量问题是经常会遇到的。变量太多,无…

通信工程学习:什么是PSK相移键控、2PSK/BPSK二进制相移键控

PSK相移键控、2PSK/BPSK二进制相移键控 PSK&#xff08;相移键控&#xff09;和2PSK/BPSK&#xff08;二进制相移键控&#xff09;是两种在通信系统中广泛使用的调制技术。以下是对它们的详细解释&#xff1a; 一、PSK&#xff1a;相移键控 1、PSK相移键控的定义&#xff1a;…

websocket client无法连接到websocket server 的问题

1. 问题描述 生产环境的websocket client和server无法通信 2. 日志现象 通过查看日志和问题复现&#xff0c;定位到是client连接到server失败&#xff0c;导致无法通信。 出现问题的代码 出现问题的日志 21:25:27.790 [main] INFO websocket.MyWebSocketClient - start to…

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目&#xff1a; 分析 我们首先使用哈希表来统计数字出现的频率&#xff0c;然后我们使用一个桶排序。我们首先定义一个长度为n1的数组&#xff0c;对于下图这个示例就是长度为7的数组。为什么需要一个长…

Redis进阶(七):分布式锁

在分布式系统下&#xff0c;涉及到多个节点访问同一个公共资源的情况&#xff0c;此时需要通过 锁 进行互斥控制&#xff1a;避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题&#xff1a; 解决: 采用redis实现分布式锁 可用采取&#xff1a;在购票的时候&#xff0…

C语言 | Leetcode C语言题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step step << 1;}return …

【机器学习】和【人工智能】在量子力学的应用及代码案例分析

知孤云出岫 这里写目录标题 一、机器学习和人工智能在量子力学中的应用概述二、量子态的表示与模拟2.1 变分自编码器&#xff08;VAE&#xff09;用于量子态模拟 三、量子系统的哈密顿量学习3.1 使用机器学习推断哈密顿量 四、量子计算中的算法优化4.1 变分量子算法&#xff08…

AI大模型日报#0908:OpenAI计划年底推出GPT Next、Roblox官宣AI秒生3D物体模型

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;、“智谱AI”&#xff08;glm-4-0520&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅…

如果文件从存储卡中被误删除,存储卡数据恢复如何恢复?

如果文件被误从存储卡中删除&#xff0c;如何从Android 手机、相机或其他数码设备&#xff08; SD/CF/MicroSD/xD ...&#xff09;恢复照片视频&#xff1b;存储卡已格式化&#xff0c;原始 0 字节&#xff0c;空白&#xff1b;存储卡要求格式化&#xff1b;存储卡未显示、无法…

基于ONNX-YOLOv10-Object-Detection项目实现yolov10模型onnx-python推理

项目地址&#xff1a;https://github.com/ibaiGorordo/ONNX-YOLOv10-Object-Detection 项目依赖&#xff1a;onnxruntime-gpu、opencv-python、imread-from-url、cap-from-youtube、ultralytics 1、代码修改 代码改动说明&#xff1a;yolov10/yolov10.py中的第18行修改为以下…

Docker部署tenine实现后端应用的高可用与负载均衡

采用Docker方式的Tengine 和 keepalived 组合模式可以实现小应用场景的高可用负载均衡需求 目录 网络架构一、环境准备二、软件安装1. 下载Tenine镜像2. 下载Keepalived镜像3. 制作SpringBoot镜像 三、软件配置1. 创建应用容器2. 代理访问应用3. 创建Keepalived4. 测试高可用 网…

基于YOLOv5的积水检测模型训练:从数据到模型的全面解析

之前给大家带来了Yololov5Pyqt5Opencv 实时城市积水报警系统&#xff0c; 详见&#xff1a; Yololov5Pyqt5Opencv 实时城市积水报警系统_yolo opencv pyqt5-CSDN博客 今天详细解析一下积水检测模型训练部分的内容 在积水检测项目中&#xff0c;实时性和准确性是至关重要的。…

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介 1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 &#xff08;OTA&#xff09; 3在线编程&#xff08;ICP把整个程序都更新掉&#xff09; 1 系统的Bootloader写死了&#xff0c;只能用串口下载到指定的位置&a…