CoAP 协议介绍:特性、应用与优劣势
CoAP 协议简介
CoAP 协议(Constrained Application Protocol)是一种专门为受限设备设计的互联网应用协议。它旨在让小型、低功耗的设备能够接入物联网(IoT)。该协议允许这些设备以最小的资源与更广泛的互联网进行通信。
CoAP 协议的基础规范较小,可以根据需要扩展更多功能。它基于 UDP 工作,并提供应用端点之间的请求/响应交互模型,促进不同类型设备之间的互操作性。
CoAP 还具备高度的可靠性,设有确保消息传递的机制,即使在网络连接有限或设备电源不足的情况下也能保证消息送达。这使得它非常适合在复杂网络环境中运行的物联网设备。
CoAP 协议的主要特性
RESTful 架构
CoAP 使用 RESTful(表述性状态转移)架构,遵循一系列约束,使其能够在大型分布式网络上高效运行。在 RESTful 系统中,数据和功能被视为资源,并通过标准化的统一接口来访问这些资源。
对于 CoAP,这种 RESTful 架构使其能够在不同类型的设备之间提供高度的互操作性。同时,这也让开发者可以轻松构建使用该协议的应用程序,因为他们可以使用标准的 HTTP 方法(如 GET、POST、PUT 和 DELETE)与资源进行交互。
内置发现功能
CoAP 协议的内置发现机制使设备能够在不需要事先了解对方存在的情况下,发现其他设备上的资源。这在物联网网络中尤其有用,因为设备可能会不断加入或离开网络。
CoAP 的内置发现功能通过一个称为“core”的标准资源实现,该资源提供设备上可用资源的列表。网络中的其他设备可以查询此资源,从而发现哪些资源可用以及如何与它们进行交互。
异步消息交换
可能不常在线或不可用的物联网网络至关重要。通过异步消息交换,设备可以向另一个设备发送请求后继续其他任务,而无需等待响应。一旦响应到达,即使有延迟,设备也能处理该响应。
该功能通过在每个 CoAP 消息中使用消息标识符来实现,使设备能够将响应与请求进行匹配。结合丢失消息的重传能力,CoAP 在消息交换中提供了高度的可靠性。
可选的可靠性:确认消息
CoAP 通过使用确认消息提供可选的可靠性。当设备发送确认消息时,它期望接收到方的确认。如果在指定时间内未收到确认,消息将会被重传。
此功能使 CoAP 能够在网络连接不稳定的环境中提供可靠的通信。设备可以确保关键消息被接收和处理。
CoAP 协议的应用场景
智能家居自动化
由于低开销和高可靠性,CoAP 在智能家居自动化系统中应用越来越广泛。在这些系统中,各种设备如灯光、恒温器和安全摄像头都可以使用 CoAP 协议进行通信。这不仅提供了高度的互操作性,还使得新设备能够轻松加入网络。
工业物联网
在工业物联网应用中,可靠性和效率至关重要。传感器和执行器等设备可以使用 CoAP 进行通信,从而实现对工业过程的实时监控和控制。CoAP 对组播通信的支持在这些场景中尤为有用,因为它允许单个设备同时与多个其他设备通信。
可穿戴设备与医疗健康
CoAP 在可穿戴设备和医疗健康应用中越来越受欢迎。这些应用通常涉及小型电池供电的设备,它们需要相互通信或与中央服务器通信。CoAP 的低开销和低功耗需求使其非常适合此类应用场景。
能源管理
CoAP 被用于能源管理系统中,可实现对能源使用的实时监控和控制。智能电表和能源管理控制器等设备可使用该协议进行相互通信或与中央服务器通信,从而对能源使用提供高度的控制能力。
CoAP 协议的优点
轻量级设计
CoAP 协议专为资源受限的环境设计,例如低功耗的传感器、开关、阀门和其他需要远程控制或监控的物联网设备。这些环境通常只有有限的处理能力和内存,因此 CoAP 协议的轻量级特性十分适用。
CoAP 协议采用简单的二进制头部,减少了网络上传输的数据量。头部包含了消息类型、消息 ID 和消息代码等关键信息。这种简洁性和紧凑性使得该协议更加高效,非常适合资源受限的设备和网络。
协议的通信模型同样保持轻量化。它使用类似于 HTTP 的请求-响应模型,使设备间的通信更加直接和简单。
快速传输
CoAP 协议基于 UDP(用户数据报协议)运行。UDP 是一种简单的传输协议,无需在发送数据之前建立连接。这与 TCP(传输控制协议)形成对比,后者在数据传输前必须先建立连接。
UDP 对于物联网设备非常有用,因为它们通常需要快速高效地发送少量数据。使用 UDP,设备可以在数据准备好后立即发送,而无需等待连接的建立。
高效编码
CoAP 使用二进制编码方案,这比 HTTP 使用的基于文本的编码更高效。二进制编码减少了消息的大小,从而节省带宽并提高通信速度。
CoAP 协议还支持使用压缩的 URI(统一资源标识符),进一步减少消息的大小。这在带宽通常有限的受限环境中尤其有用。
此外,CoAP 还支持分离响应,使设备能够在处理请求之前先确认收到请求。这提高了通信的效率,使设备能够更有效地管理资源。
无状态通信
在无状态通信中,客户端向服务器发送的每个请求都是独立处理的,服务器不会了解之前的请求。这使得协议更加健壮和有弹性,因为它不受单个请求失败的影响。
无状态通信还简化了协议的实现,因为服务器不需要为每个客户端维护状态。这减少了服务器的资源需求。同时,无状态通信使 CoAP 能够支持异步通信,增强了协议的灵活性,使其适用于各种物联网应用。
CoAP 协议的缺点
相较于替代方案不够成熟
CoAP 协议相比于 HTTP 和 MQTT 等替代方案来说,成熟度较低。这意味着开发者可用的资源较少,比如库和工具,这可能使开发过程更加具有挑战性。
此外,CoAP 协议的采用率也低于其替代方案,这可能导致兼容性问题。例如,并非所有物联网设备都支持 CoAP 协议,这可能限制其在某些情况下的实用性。然而,CoAP 正在逐渐受到欢迎,预计随着协议的成熟,这些问题将得到解决。
NAT 穿透问题
另一个缺点是协议在 NAT(网络地址转换)穿透方面的困难。NAT 是路由器用来在多个设备之间共享单个 IP 地址的技术。虽然这种技术被广泛使用,但它可能会给 CoAP 带来问题。
由于 CoAP 使用 UDP,而 UDP 在发送数据之前并不建立连接,这可能导致 NAT 穿透出现问题,因为路由器可能不知道将响应发送到哪里。为了解决这个问题,CoAP 协议需要使用诸如 UDP 穿孔等技术,而这可能会相对复杂且占用资源。
分片问题
CoAP 协议还容易出现分片问题,即当消息过大而无法放入单个数据包时,需要将其拆分为较小的片段。这会增加协议的复杂性并降低其效率。
分片还可能导致可靠性问题,因为单个片段的丢失可能导致整个消息的丢失。这在不可靠的网络中尤为严重,因为在这些网络中,数据包丢失是常见现象。
CoAP vs. MQTT
CoAP 协议轻量级、基于 UDP 且高效,适用于受限环境。它还支持无状态通信,这增强了其稳健性和弹性。然而,与 MQTT 相比,它的成熟度较低,存在 NAT 穿透问题,并且容易出现分片现象。
MQTT 是一个更加成熟的协议,拥有大量可供开发者使用的资源。它是基于 TCP 的,这使得在某些场景中比 CoAP 更可靠。然而,MQTT 的资源占用比 CoAP 更高,并且不支持无状态通信。
CoAP 和 MQTT 可以协同工作。当受限的 CoAP 网络需要与外部网络通信时,可以使用 MQTT Broker 来管理通信。
以下表格总结了这两种协议的详细比较:
特性 | MQTT | CoAP |
---|---|---|
目的 | 物联网中的消息传递与通信 | 设计用于物联网中的资源受限设备 |
传输协议 | TCP(传输控制协议) | UDP(用户数据报协议) |
通信方式 | 发布/订阅模型 | 请求/响应模型 |
头部大小 | 2 字节固定头 | 4 字节固定头 |
负载格式 | 支持二进制和文本负载 | 支持二进制和文本负载 |
服务质量(QoS) | 消息投递的级别 0、1 和 2 | 通过“可确认”和“非可确认”消息提供可靠性 |
消息类型 | 发布、订阅、连接、断开等 | GET、POST、PUT、DELETE 等 |
资源发现 | 不内置,需要额外机制 | 通过 CoRE Link Format 内置资源发现 |
安全性 | 支持 SSL/TLS 进行加密和身份验证 | 使用数据报传输层安全(DTLS)进行安全通信 |
连接开销 | 维持持久连接 | 轻量级连接设置 |
可扩展性 | 适合大规模部署 | 设计用于受限设备和网络 |
头部压缩 | 无内置头部压缩 | 使用 CoAP 特定的头部压缩 |
消息压缩 | 支持消息负载压缩 | 支持消息负载压缩 |
用例 | 广泛的 IoT 应用 | 资源有限的受限设备 |
通过 EMQX 实现 CoAP 网络与外部通信
CoAP 支持在受限网络上进行低功耗、低消耗设备之间的通信。虽然 CoAP 在限制网络中表现良好,但在设备需要与外部网络通信时,它却显得力不从心。此外,由于 CoAP 是根据 M2M 网络模型设计的,它对资源处理中心的支持也不足(基于 CoAP 的 LwM2M 协议引入了资源注册和资源服务等概念)。
这个问题可以通过使用 EMQX 解决,EMQX 是全球领先的开源 MQTT Broker。对于需要与外部网络通信的 CoAP 设备,使用 EMQX 作为 Broker 可以轻松实现以下功能:
- 设备认证:验证设备身份,拒绝来自不可信设备的数据。
- 资源权限管理:管理资源权限,包括为不同设备指定不同的资源读写权限。
- 数据传输中心:在不同网络上的 CoAP 设备之间建立数据传输中心。
- 与其他应用集成:集成 CoAP 管理应用、数据分析应用,以及 CoAP 设备与网络之间的数据访问。
EMQX 支持两种不同的 CoAP 访问方式,涵盖了大多数 CoAP 业务场景。它们提供简单的访问方法,并且对 CoAP 协议本身没有任何更改。现有 CoAP 设备和应用访问 EMQX 的成本也非常低。
了解更多关于使用 EMQX 进行 CoAP 网络通信的内容:如何使用 EMQX 接入 CoAP 协议设备。
版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/coap-protocol
相关文章:
CoAP 协议介绍:特性、应用与优劣势
CoAP 协议简介 CoAP 协议(Constrained Application Protocol)是一种专门为受限设备设计的互联网应用协议。它旨在让小型、低功耗的设备能够接入物联网(IoT)。该协议允许这些设备以最小的资源与更广泛的互联网进行通信。 CoAP 协…...
leetcode hot100【LeetCode 53.最大子数组和】java实现
LeetCode 53.最大子数组和 题目描述 给定一个整数数组 nums,找到一个具有最大和的连续子数组(至少一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续…...
MAC C语言 Helloword
在 macOS 系统上编写并运行一个简单的 “Hello, World!” 程序,你可以使用多种编程语言。下面我将以 C 语言为例,展示如何在 macOS 上编写、编译和运行这个经典的 “Hello, World!” 程序。 步骤 1: 安装 Xcode Command Line Tools macOS 系统上通常没…...
【过程控制系统】第6章 串级控制系统
目录 6. l 串级控制系统的概念 6.1.2 串级控制系统的组成 6.l.3 串级控制系统的工作过程 6.2 串级控制系统的分析 6.2.1 增强系统的抗干扰能力 6.2.2 改善对象的动态特性 6.2.3 对负荷变化有一定的自适应能力 6.3 串级控制系统的设计 6.3.1 副回路的选择 2.串级系…...
springboot:责任链模式实现多级校验
责任链模式是将链中的每一个节点看作是一个对象,每个节点处理的请求不同,且内部自动维护一个下一节点对象。 当一个请求从链式的首段发出时,会沿着链的路径依此传递给每一个节点对象,直至有对象处理这个请求为止。 属于行为型模式…...
如何构建高效的接口自动化测试框架?
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选…...
spring-logback引用外部文件
背景 在spring微服务开发和云部署中,都涉及到日志的收集,很多时候为例方便管理和开发,很多公司都会开发一些基础配置代码。其中日志就是很重要的部分, 为了方便部署、收集、查看,所以日志文件需要存储在同一个…...
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
文章目录 一、MyBatis-Plus简介二、快速入门1、环境准备2、将mybatis项目改造成mybatis-plus项目(1)引入MybatisPlus依赖,代替MyBatis依赖(2)配置Mapper包扫描路径(3)定义Mapper接口并继承BaseM…...
go项目中比较好的实践方案
工作两年来,我并未遇到太大的挑战,也没有特别值得夸耀的项目。尽管如此,在日常的杂项工作中,我积累了不少心得,许多实践方法也在思考中逐渐得到优化。因此,我在这里记录下这些心得。 转发与封装 这个需求…...
Windows之使用putty软件以ssh的方式连接Linux中文显示乱码
项目场景: 运行环境:Windows10 使用软件:putty 操作说明:以ssh的方式连接Linux 中文显示乱码 问题描述 Windows之使用putty软件以ssh的方式连接Linux中文显示乱码 原因分析: linux 机器的系统语言字符集与putty软件…...
springboot整合hive
springboot整合hive pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…...
vxe-form table 修改表单数据校验的主题样式
在使用 vxe-form 表单校验时,数据校验可以支持2种主题样式 官网:https://vxeui.com 普通样式 通过设置 valid-config.theme‘normal’ 设置为普通样式 高亮样式 通过设置 valid-config.theme‘beautify’ 设置为高亮样式 <template><div&…...
【UE5】使用基元数据对材质传参,从而避免新建材质实例
在项目中,经常会遇到这样的需求:多个模型(例如 100 个)使用相同的材质,但每个模型需要不同的参数设置,比如不同的颜色或随机种子等。 在这种情况下,创建 100 个实例材质不是最佳选择。正确的做…...
一个计算频率的模块
先上代码 module _sync_reg #(parameter INIT 0,parameter ASYNC_RESET 0 ) (input clk,input rst,input in,output out );(* ASYNC_REG "TRUE" *) reg sync1; (* ASYNC_REG "TRUE" *) reg sync2;assign out sync2;generate if (ASYNC_RE…...
在SpringBoot项目中集成MongoDB
文章目录 1. 准备工作2. 在SpringBoot项目中集成MongoDB2.1 引入依赖2.2 编写配置文件2.3 实体类 3. 测试4. 文档操作4.1 插入操作4.1.1 单次插入4.1.2 批量插入 4.2 查询操作4.2.1 根据id查询4.2.2 根据特定条件查询4.2.3 正则查询4.2.4 查询所有文档4.2.5 排序后返回 4.3 删除…...
OpenJudge - 24:输出保留3位小数的浮点数
【题目来源】http://shnoip.openjudge.cn/level1/24/【题目描述】 读入一个单精度浮点数,保留3位小数输出这个浮点数。【输入格式】 只有一行,一个单精度浮点数。【输出格式】 也只有一行,读入的单精度浮点数。【输入样例】 12.34521【输出样…...
华为流程L1-L6业务流程深度细化到可执行
该文档主要介绍了华为业务流程的深度细化及相关内容,包括流程框架、建模方法、流程模块描述、流程图建模等,旨在帮助企业构建有效的流程体系,实现战略目标。具体内容如下: 华为业务流程的深度细化 流程层级:华为业务流程分为 L1 - L6 六个层级,L1 为流程大类,L2 为流程…...
Python中Tushare(金融数据库)入门详解
文章目录 Python中Tushare(金融数据库)入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…...
Odoo中,要实现实时数据推送,SSE 与 WebSocket 该如何选择
目录 1. 技术特点对比 2. 使用场景 适合使用 SSE 的场景: 适合使用 WebSocket 的场景: 3. 优缺点总结 SSE 优点: SSE 缺点: WebSocket 优点: WebSocket 缺点: 4. 选择建议 选择 SSE 的条件&#x…...
02. Python基础知识
一、注释 在开发程序过程中,如果一段代码的逻辑比较复杂,不是特别容易理解,可以适当添加注释,以辅助自己或其他开发人员解读代码。注释是给程序员看的,为了让程序员方便阅读代码,解释器会忽略注释。在 Pyto…...
Mac 修改默认jdk版本
当前会话生效 这里演示将 Java 17 版本降低到 Java 8 查看已安装的 Java 版本: 在终端(Terminal)中运行以下命令,查看已安装的 Java 版本列表 /usr/libexec/java_home -V设置默认 Java 版本: 找到 Java 8 的安装路…...
数字赋能,气象引领 | 气象景观数字化服务平台重塑京城旅游生态
在数字化转型的浪潮中,旅游行业正以前所未有的速度重塑自身,人民群众对于高品质、个性化旅游服务需求的日益增长,迎着新时代的挑战与机遇,为开展北京地区特色气象景观预报,打造“生态气象旅游”新业态,助推…...
C语言项⽬实践-贪吃蛇
目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…...
springboot整合kafka
springboot整合kafka pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven…...
量子计算机全面解析:技术、应用与未来
标题:量子计算机全面解析:技术、应用与未来 一、什么是量子计算机? 量子计算机是一种利用量子力学原理(如叠加、纠缠和干涉)进行计算的新型计算设备。与传统计算机基于比特(0 和 1)的运算方式不…...
提升软件测试报告的质量:Allure2中添加用例失败截图、日志、HTML块和视频的方法
Allure2的用途 Allure2是一个用于生成测试报告的框架,广泛应用于自动化测试和手动测试中。它支持多种测试框架,如JUnit、TestNG、MSTest等,通过生动的图表和详细的日志,使得非技术人员也能轻松地理解测试结果。许多团队选用Allur…...
Mysql启动报错:本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止
原因 是手动去改了mysql的配置文件my.ini的内容,重新启动服务启动不了。 看了很多文章最终找到了恢复数据的办法。 第一步备份 先备份mysql数据存的文件夹Data,如果找不到则去看配置文件那一行datadir 第二步重新安装mysql 卸载篇可以看我之前发的文…...
国际环境和背景下的云计算领域
前言 在当前国际环境和背景下,云计算领域呈现出复杂多变的局面,其发展深受技术创新、地缘政治、全球经济以及监管政策的影响。以下从技术趋势、市场竞争、地缘政治和监管环境四个方面详细解析云计算领域的现状。 一、技术趋势:多云与边缘计算…...
网络安全-企业环境渗透2-wordpress任意文件读FFmpeg任意文件读
一、 实验名称 企业环境渗透2 二、 实验目的 【实验描述】 操作机的操作系统是kali 进入系统后默认是命令行界面 输入startx命令即可打开图形界面。 所有需要用到的信息和工具都放在了/home/Hack 目录下。 本实验的任务是通过外网的两个主机通过代理渗透到内网的两个主机。…...
C# 超链接控件LinkLabel无法触发Alt快捷键
在C#中,为控件添加快捷键的方式有两种,其中一种就是Windows中较为常见的Alt快捷键,比如运行对话框,记事本菜单等。只需要按下 Alt 框号中带下划线的字母即可触发该控件的点击操作。如图所示 在C#开发中,实现类似的操作…...
一分钟学习数据安全——数据安全风险的系统化应对思路
数据是组织的重要资产,未经授权的数据访问可能导致数据泄露、数据篡改、隐私侵犯和合规风险等问题。企业可以通过数据访问控制来提高信息系统在数据全生命周期管理中的安全性。企业可以引入IAM系统,来控制身份来管理权限。通过对用户访问权限的管理和合适…...
深入了解 Spring Security 的授权核心功能
Spring Security 是一个强大且灵活的安全框架,能够帮助开发者为 Spring 应用程序提供认证和授权服务。在实际应用中,Spring Security 主要涉及用户的认证(谁是用户)和授权(用户能做什么)。本文将深入讲解 S…...
【Web前端】创建我的第一个 Web 表单
Web 开发中,表单是不可或缺的组成部分。无论是用户注册、登录还是反馈收集,表单都是与用户交互的重要方式。 什么是 Web 表单? Web 表单是一种用于收集用户输入数据的界面元素。它们允许用户在浏览器中输入信息并提交这些信息到服务器。Web …...
“人工智能+高职”:VR虚拟仿真实训室的发展前景
在当今科技日新月异的时代,人工智能(AI)与虚拟现实(VR)技术的融合正逐步改变着各行各业,教育领域也不例外。特别是在高等职业教育(简称“高职”)体系中,VR虚拟仿真实训室…...
状态模式之状态机
状态机的背景 在软件开发过程中,尤其是涉及到复杂的系统行为控制时,我们常常会遇到这样的情况:一个对象或者系统会在多种状态之间进行转换,并且在不同状态下对相同事件的响应是不同的。 以自动售卖机为例,自动售卖机…...
NUXT3学习日记四(路由中间件、导航守卫)
前言 在 Nuxt 3 中,中间件(Middleware)是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑,像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用,也可以只在特定页…...
基于重复控制补偿的高精度 PID 控制
1. 背景与原理 重复控制(Repetitive Control, RC)是一种适用于周期性信号跟踪和周期性扰动抑制的控制方法,通过在控制回路中引入周期补偿器来提高系统的控制精度。将 RC 与 PID 控制相结合,利用 PID 的快速响应特性和 RC 的周期补…...
Linux之日志
日志 在编写网络服务器, 各种软件时, 程序一定要打印一些日志信息. 1. 可以向显示器打印, 也可以向文件中写入. 2. 日志是软件在运行时记录的流水账, 用于排查服务进程挂掉的信息. 其中必须要有的是: 日志等级, 时间, 日志内容.可选的是文件名, 代码行数, 进程pid 等 日志…...
【LeetCode面试150】——202快乐数
博客昵称:沈小农学编程 作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟! PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在…...
云原生之k8s服务管理
文章目录 服务管理Service服务原理ClusterIP服务 对外发布应用服务类型NodePort服务Ingress安装配置Ingress规则 Dashboard概述 认证和授权ServiceAccount用户概述创建ServiceAccount 权限管理角色与授权 服务管理 Service 服务原理 容器化带来的问题 自动调度:…...
【Vue】 npm install amap-js-api-loader指南
前言 项目中的地图模块突然打不开了 正文 版本太低了,而且Vue项目就应该正经走项目流程啊喂! npm i amap/amap-jsapi-loader --save 官方说这样执行完,就这结束啦!它结束了,我还没有,不然不可能记录这篇文…...
RocketMQ: 部署结构与存储特点
RocketMQ 是什么 它是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点 Producer、Consumer、队列都可以分布式Producer 向一些队列轮流发送消息 队列集合称为 TopicConsumer 如果做广播消费则一个 consumer 实例消费这个 Topic 对应的所有队列如果…...
Android OpenGL ES详解——绘制圆角矩形
1、绘制矩形 代码如下: renderer类: package com.example.roundrectimport android.content.Context import android.opengl.GLES30 import android.opengl.GLSurfaceView.Renderer import com.opengllib.data.VertexArray import com.opengllib.prog…...
【大数据学习 | Spark】Spark的改变分区的算子
当分区由多变少时,不需要shuffle,也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时,是需要shuffle的。 但极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系&…...
前端知识点---rest(javascript)
文章目录 前端知识点---rest(javascript)rest的用法基本语法特点使用场景与扩展运算符(spread)区别小练习 前端知识点—rest(javascript) rest出现于ES2015 function doSum(a,b, ...args) //示例中的args就是一个rest参数 //它会将后续的所有参数存储…...
Spark使用过程中的 15 个常见问题、详细解决方案
目录 问题 1:Spark 作业超时问题描述解决方案Python 实现 问题 2:内存溢出问题描述解决方案Python 实现 问题 3:Shuffle 性能问题问题描述解决方案Python 实现 问题 4:Spark 作业调度不均问题描述解决方案Python 实现 问题 5&…...
ASP.NET MVC宠物商城系统
该系统采用B/S架构,使用C#编程语言进行开发,以ASP.NET MVC框架为基础,以Visual Studio 2019为开发工具,数据库采用SQL Server进行保存数据。系统主要功能包括登录注册、宠物展示、个人中心、我的订单、购物车、用户管理、宠物类别…...
DQN系列算法详解
代码链接见文末 1. Q-learning 1.1 概述 Q-Learning是一种强化学习算法,目的是通过选择能带来最大长期收益的行为来完成任务。 做事包含瞬时奖励和记忆经验奖励: 在Q-Learning中,每个动作都会带来“瞬时奖励”,同时也会根据过去的经验记住哪些行为更有利。瞬时奖励: 这里…...
uniapp发布android上架应用商店权限
先看效果: 实现原理: 一、利用uni.addInterceptor的拦截器,在一些调用系统权限前拦截,进行弹窗展示,监听确定取消实现业务逻辑。 二、弹窗是原生nativeObj进行drawRect绘制的 三、权限申请调用使用的 plus.android.…...
已阻止加载“http://localhost:8086/xxx.js”的模块,它使用了不允许的 MIME 类型 (“text/plain”)。
记录今天解决的一个小bug 在终端启动8080端口号监听后,打开网址http://localhost:8080,发现不能正确加载页面,打开检查-控制台,出现如下警告:已阻止加载“http://localhost:8086/xxx.js”的模块,它使用了不…...