CRON表达式编辑器与定时任务实现技术文档
1. 前端CRON表达式编辑器组件
CronExpressionEditor.vue
组件是系统中用于创建和编辑CRON表达式的核心UI组件,它提供了直观的界面来生成复杂的定时任务表达式。
1.1 组件结构与状态管理
// 核心状态变量
const second = ref<string>('0');
const minute = ref<string>('0');
const hour = ref<string>('*');
const day = ref<string>('*');
const month = ref<string>('*');
const week = ref<string>('?');
const year = ref<string>('');// 选择模式
const secondMode = ref('specific');
const minuteMode = ref('specific');
const hourMode = ref('every');
const dayMode = ref('every');
const monthMode = ref('every');
const weekMode = ref('notSpecified');
const yearMode = ref('notSpecified');
组件使用Vue 3的Composition API管理复杂状态,每个CRON时间单位(秒、分、时、日、月、周、年)都有对应的:
- 值状态(value):存储实际CRON表达式部分
- 模式状态(mode):决定用户如何设置此字段(具体值、每一个、周期范围、间隔等)
1.2 值更新与表达式生成
组件通过一系列的响应式函数处理用户交互,核心是updateFieldValue
函数:
const updateFieldValue = (field: string) => {switch (field) {case 'minute':if (minuteMode.value === 'every') {minute.value = '*';} else if (minuteMode.value === 'specific') {minute.value = specificMinutes.value.length > 0 ? specificMinutes.value.join(',') : '0';} else if (minuteMode.value === 'cycle') {minute.value = `${minuteCycleStart.value}-${minuteCycleEnd.value}`;} else if (minuteMode.value === 'interval') {minute.value = `${minuteIntervalStart.value}/${minuteIntervalStep.value}`;}break;// 其他字段处理...}
};
当用户更改任何设置时,这个函数会更新对应的CRON表达式部分,然后调用updateCronExpression
生成完整表达式。
1.3 PostgreSQL适配处理
组件特别增加了对PostgreSQL pg_cron的兼容转换:
const convertToPgCronFormat = (expression: string): string => {// 1. 移除秒字段,pg_cron只支持5段式表达式const parts = expression.split(' ');if (parts.length >= 6) {parts.shift();}// 2. 处理特殊步长格式 0/10 转为 */10const convertedParts = parts.map(part => {if (part.match(/^0\/\d+$/)) {return part.replace('0/', '*/');}return part;});return convertedParts.join(' ');
};
这确保生成的CRON表达式能够在PostgreSQL的pg_cron扩展中正确执行。
1.4 人性化表达与预览
组件使用cronstrue
库将技术性的CRON表达式转换为自然语言描述:
const cronDescription = computed(() => {try {if (!cronExpression.value) return '请输入有效的Cron表达式';// 使用cronstrue库解析cron表达式为中文const description = cronstrue.toString(cronExpression.value, { locale: 'zh_CN' });// 向父组件发送当前表达式的描述emit('update:description', description);return description;} catch (e) {console.error('解析错误:', e);emit('update:description', '无效的Cron表达式');return '无效的Cron表达式';}
});
同时提供未来几次执行时间的预览:
const nextExecutionTimes = computed(() => {try {if (!cronExpression.value) return [];const interval = parseCronExpression(cronExpression.value);if (!interval) return [];const times = [];for (let i = 0; i < 5; i++) {try {const next = interval.next();times.push(dayjs(next.toDate()).format('YYYY-MM-DD HH:mm:ss'));} catch (e) {break;}}return times;} catch (e) {console.error('计算下次执行时间错误:', e);return [];}
});
2. 分析计划编辑器与CRON集成
AnalysisPlanEditor.vue
是创建和编辑分析计划的主界面,它集成了CRON表达式编辑器。
2.1 表单与CRON表达式关联
const formState = reactive({// ...其他字段cronExpression: '0 9 * * *', // 默认每天上午9点cronDescription: '', // 表达式的描述字段// ...其他字段
});
2.2 CRON表达式验证
编辑器实现了表单验证,确保CRON表达式有效:
const rules: Record<string, Rule[]> = {// ...其他字段验证cronExpression: [{ required: true, message: '请输入CRON表达式', trigger: 'blur', type: 'string' },{ validator: (_: Rule, value: string) => {// 简单验证CRON表达式是否有效const parts = value.trim().split(/\s+/);if (parts.length < 5 || parts.length > 7) {return Promise.reject('无效的CRON表达式');}return Promise.resolve();},trigger: 'blur',type: 'string' }],// ...其他字段验证
};
2.3 提交计划与CRON存储
当保存分析计划时,CRON表达式会被存储到execution_frequency
字段:
const handleSubmit = async () => {try {await formRef.value.validate();// 构建计划数据const planData = {// ...其他字段execution_frequency: {cron_expression: formState.cronExpression,description: formState.cronDescription},// ...其他字段};// 发送到后端// ...提交逻辑} catch (error) {// ...错误处理}
};
3. 前端CRON工具函数
cronUtils.ts
文件提供了前端使用的CRON表达式处理工具函数:
3.1 CRON表达式转换
export function convertToPgCronFormat(cronExpression: string): string {try {if (!cronExpression) return '';// 分割表达式const parts = cronExpression.trim().split(/\s+/);// 处理6段式表达式 (带秒的格式)if (parts.length === 6) {// 移除秒字段return parts.slice(1).join(' ');}// 处理7段式表达式 (带秒和年的格式)if (parts.length === 7) {// 移除秒和年字段return parts.slice(1, 6).join(' ');}// 处理特殊格式:0/10 这种步长表达式在pg_cron中应写为 */10const result = parts.map(part => {if (part.match(/^0\/\d+$/)) {return part.replace('0/', '*/');}return part;}).join(' ');return result;} catch (error) {console.error('转换CRON表达式出错:', error);return cronExpression; // 转换失败时返回原表达式}
}
3.2 CRON表达式描述生成
export function formatCronToText(cronExpression: string): string {try {if (!cronExpression) return '无效的表达式';// 解析cron表达式部分const parts = cronExpression.trim().split(/\s+/);if (parts.length < 5 || parts.length > 7) {return '无效的CRON表达式';}// ...复杂的解析逻辑return description;} catch (error) {console.error('解析CRON表达式出错:', error);return '无法解析的CRON表达式';}
}
3.3 预设模板
系统提供了常用的CRON表达式模板,便于用户快速选择:
export const cronTemplates = [{ label: '每分钟', value: '* * * * *' },{ label: '每5分钟', value: '*/5 * * * *' },{ label: '每小时', value: '0 * * * *' },{ label: '每天午夜', value: '0 0 * * *' },{ label: '每天上午9点', value: '0 9 * * *' },{ label: '每周一上午9点', value: '0 9 * * 1' },{ label: '每月1号午夜', value: '0 0 1 * *' },{ label: '工作日上午9点', value: '0 9 * * 1-5' }
];
4. 前后端交互流程
4.1 创建/编辑分析计划
- 用户通过
AnalysisPlanEditor.vue
设置计划参数,包括使用CronExpressionEditor.vue
设置CRON表达式 - 表单验证确保CRON表达式格式正确
- 提交时,将CRON表达式转换为pg_cron兼容格式,并存储在
execution_frequency
字段
// 保存分析计划
const savePlan = async (formData) => {try {// 确保CRON表达式格式正确const pgCompatibleCron = convertToPgCronFormat(formData.cronExpression);const planData = {// ...其他字段execution_frequency: {cron_expression: pgCompatibleCron,description: formData.cronDescription},// ...其他字段};// 创建或更新if (isEditMode.value) {await analysisPlanApi.updateAnalysisPlan(planId.value, planData);} else {await analysisPlanApi.createAnalysisPlan(planData);}message.success(`分析计划${isEditMode.value ? '更新' : '创建'}成功`);router.push('/desktop/quality_management/analysis_plans');} catch (error) {message.error(`操作失败: ${error.message}`);}
};
4.2 前端时间处理
前端使用dayjs
库处理日期时间,确保与后端时区一致:
import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';// 启用dayjs插件
dayjs.extend(isSameOrBefore);
dayjs.locale('zh-cn');
5. 技术实现要点
5.1 CRON表达式编辑器的核心特性
-
模块化设计:
- 将CRON表达式编辑功能封装为独立组件
- 实现与父组件的双向绑定(v-model)
- 提供表达式描述的辅助输出
-
用户友好界面:
- 将复杂的CRON语法转换为直观的界面控件
- 提供多种设置模式:specific、every、cycle、interval
- 实时预览未来执行时间
-
格式兼容性:
- 支持标准6段式和7段式CRON表达式
- 自动转换为PostgreSQL pg_cron兼容的5段式
- 处理特殊语法格式
5.2 前端工具函数设计
-
清晰的职责划分:
- 将CRON相关逻辑抽取到独立的
cronUtils.ts
- 提供统一的格式转换和描述生成API
- 将CRON相关逻辑抽取到独立的
-
错误处理与降级:
- 所有工具函数都有完善的错误捕获
- 解析失败时提供友好的降级显示
5.3 前后端协同
-
统一格式约定:
- 前端将CRON表达式转换为后端兼容格式
- JSON结构化存储表达式与描述信息
-
双重验证:
- 前端提供基本的格式验证
- 后端在创建pg_cron作业时再次验证和转换
6. 数据流图
7. 最佳实践与注意事项
-
CRON表达式注意事项:
- 使用预设模板可以避免常见错误
- PostgreSQL pg_cron仅支持5段式表达式(分 时 日 月 周)
- 避免使用过于复杂的表达式
-
前端开发建议:
- 充分利用
cronstrue
库提供人性化描述 - 使用计算属性显示未来执行时间
- 在保存前进行充分验证
- 充分利用
-
与后端集成:
- 确保时区设置一致(前端与数据库)
- 理解pg_cron的限制和特性
- 正确处理特殊语法(如
0/10
到*/10
的转换)
通过这种设计,系统实现了用户友好的定时任务设置界面,同时确保生成的CRON表达式能够在PostgreSQL后端正确执行,为分析计划的自动执行提供了强大支持。
相关文章:
CRON表达式编辑器与定时任务实现技术文档
1. 前端CRON表达式编辑器组件 CronExpressionEditor.vue组件是系统中用于创建和编辑CRON表达式的核心UI组件,它提供了直观的界面来生成复杂的定时任务表达式。 1.1 组件结构与状态管理 // 核心状态变量 const second ref<string>(0); const minute ref&…...
45. 跳跃游戏 II
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…...
《解锁AudioSet:开启音频分析的无限可能》
音频新时代的 “密钥”:AudioSet 登场 在科技飞速发展的今天,音频作为信息传播与交互的关键媒介,早已渗透到现代科技的各个角落。从智能手机中的语音助手,让我们通过简单的语音指令就能查询信息、发送消息,到智能家居系…...
环境太多?不好管理怎么办?TakMll 工具帮你快速切换和管理多语言、多版本情况下的版本切换。
本篇文章主要介绍一款环境管理工具,即TakMll,通过简单的入口命令 “tkm” 即可快速的管理多种语言下、多种版本的环境切换,诸如快速切换PHP、同时存在java、mave等不同版本。 作者:任聪聪 日期:2025年6月26日 TakMll 特…...
spring-ai 1.0.0 (1)模型调用能力
听说1.0是一个非常好用的版本,最后还是扛不住听说的压力,为了落实自己悬浮心理,自己还是着手实践一下了。 第一步pom集成: 参考spring-projects/spring-ai | DeepWiki维基以及官方文档入门 :: Spring AI …...
如何在 Manjaro Linux 上启用 AUR 仓库来安装软件包
Manjaro 是基于 Arch 的系统,是了解和学习 Arch Linux 命令的绝佳方式。它自带所有流行的桌面环境界面,无论是 XFCE 还是 Gnome 的爱好者,都可以在 Manjaro 中直接使用。 Manjaro 或 Arch Linux 的默认软件包管理器是 Pacman,我们…...
简单使用python
本文章没有深入探讨python,只说语法格式,合适于有其他编程语言的基础、并想快速使用python的人查看。 一、print() 用于打印信息,括号中可以是数学运算表达式或者字符串(或者说是文字)。 print(hello!) 1.1、转义字…...
2025服务端java搭建篇:蜻蜓I即时通讯系统私有化部署深度指南-优雅草卓伊凡|麻子|贝贝
2025服务端java搭建篇:蜻蜓I即时通讯系统私有化部署深度指南-优雅草卓伊凡|麻子|贝贝 前言 蜻蜓I即时通讯系统是一款不依赖第三方服务的私有化即时通讯解决方案,本指南将详细介绍如何使用宝塔面板在CentOS系统上完成系统的完整部署。私有化部署意味着您…...
用Streamlit开发第一个Python应用程序
用Streamlit开发第一个Python应用程序 Using Streamlit to Develop the First Application in Python By JacksonML 1.Streamlit简介 Streamlit是个新出世的、功能强大的Python第三方库,将为基于Web的Python应用程序大放异彩。 Streamlit官网主页面如下&#x…...
IDEA + Spring Boot + javadoc 实例应用
1、添加 javadoc 插件 依赖 pom.xml <build><plugins><!-- javadoc 插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>3.6.3</version><…...
【机器学习深度学习】交互式线性回归 demo
目录 一、环境准备 二、Demo 功能 三、完整交互 demo 代码 3.1 执行代码 3.2 示例交互演示 3.3 运行结果 3.4 运行线性图 使用 PyTorch 构建交互式线性回归模型:输入数据、拟合直线、图像可视化并实现实时预测,助你深入理解机器学习从数据到模型的…...
新手向:Anaconda3的安装与使用方法
我们在刚开始接触Python时使用的是Python的直接编译器,如果我们需要进行其他的项目编写往往需要使用另一个版本的Python ,这样反复的下载很是麻烦并且还会造成系统变量的紊乱.这次我们引入Anaconda3,可创建虚拟的Python环境,满足不同项目的需要,当不用的时候可以直接放心删除不…...
详解零拷贝
目录 一、用户态(User Mode)和内核态(Kernel Mode) 1.1 用户态 (User Mode): 1.2 内核态 (Kernel Mode): 1.3 关键交互:系统调用 (System Call) 二、为什么需要区分用户态和内核态&#x…...
微服务常用的基础知识
1.微服务介绍 1.1 产生背景 随着互联网的发展,网站应用的规模不断扩大,传统单体架构逐渐难以应对大型网站高并发、高扩展性等需求,于是分布式系统架构应运而生。Spring Cloud 就是在这种背景下诞生的,它利用 Spring Boot 的开发便…...
【开源工具】Windows一键配置防火墙阻止策略(禁止应用联网)| 附完整Python源码
🛡️【开源工具】Windows一键配置防火墙阻止策略(禁止应用联网)| 附完整源码 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。 🐋 希望大家多多支持,…...
6月份最新代发考试战报:思科华为HCIP HCSE 考试通过
6月份最新代发考试战报:思科华为HCIP HCSE 考试通过 H19-423 HCSA-Presales-IP Network 数通考试通过, H12-725 HCIP-Security安全 考试通过,H13-121 HCIP-Kunpeng Application Developer鲲鹏计算 考试通过,CCNP 350-401考试通过…...
本地部署开源时间跟踪工具 Kimai 并实现外部访问( Windows 版本)
Kimai 是一款开源的时间跟踪工具,它易于使用,并提供了强大的报告功能,在个人和团队记录工作时间、项目时间和活动时间等之后可以帮助用户了解他们是如何花费时间的,从而提高生产力和效率。本文将详细介绍如何在 Windows 系统本地部…...
SpringBoot 中 @Transactional 的使用
SpringBoot 中 Transactional 的使用 一、Transactional 的基本使用二、Transactional 的核心属性三、使用避坑(失效场景)3.1 自调用问题3.2 异常处理不当3.3 类未被 Spring 管理3.4 异步方法内使用失效 四、工作实践4.1 事务提交之后执行一些操作4.2 事…...
Mac电脑安装iTerm2通过rz命令上传文件到远程服务器
背景 闲着没事买了个云服务器玩(京东云轻量云主机),Mac本地搞了个java的jar包,想上传到云服务器,通过scp命令在Mac自带的【终端】上怎么都上传不了,如图。但是通过ssh命令(ssh root主机IP &…...
供应链数据可视化大屏
在全球化与数字化转型的双重浪潮下,供应链管理正面临前所未有的挑战:黑天鹅事件频发、多环节协同效率低下、库存与成本难以平衡……如何让供应链更透明、更敏捷、更具韧性?供应链数据可视化大屏应运而生,成为企业破解管理痛点的关…...
A2O MAY登上央视《中国音乐TOP榜》舞台,展现新歌榜冠军实力
——A2O MAY凭借新歌《BOSS》登上中国QQ音乐新歌榜冠军后,成功出演CCTV音乐节目《中国音乐TOP榜》,以实力赢得瞩目。 由A2O Entertainment(以下简称A2O)推出的全球女团 A2O MAY(成员包括朱晨予CHENYU、李诗洁SHIJIE、…...
关于如何在 Git 中切换到之前创建的分支的方法
文章目录 关于如何在 Git 中切换到之前创建的分支的方法一、确保你在项目目录中二、查看所有分支(可选)三、切换到目标分支四、如果分支仅在远程存在五、验证是否切换成功六、常见问题处理七、总结命令流程 PS:下次进入分支时,只需完成步骤1 …...
vue3+element-plus 组件功能实现 上传功能
一、整体功能概述 这段代码实现了一个基于 Vue 3 和 Element Plus 组件库的文件导入及预览功能模块。主要包含了一个主导入对话框(用于上传文件、展示文件相关信息、进行导入操作等)以及一个用于预览文件内容的预览对话框。支持导入特定格式(…...
多相机人脸扫描设备如何助力高效打造数字教育孪生体?
在教育数字化转型浪潮中,数字孪生体作为现实教育场景的虚拟映射,正成为智慧教育发展的关键技术支点。传统教育模式面临师资资源分布不均、个性化教学难以覆盖、跨时空教学场景受限等痛点,而数字孪生体通过构建高仿真虚拟教育主体(…...
高中成绩可视化平台开发笔记
高中成绩可视化平台(1) 一、项目概述 本系统是一个基于 PyQt5 和 Matplotlib 的高中成绩数据可视化分析平台,旨在帮助教师快速了解学生成绩分布、班级对比、学科表现等关键指标。平台支持文科与理科的数据切换,并提供多个维度的图…...
圆周期性显示和消失——瞬态实现(CAD c#二次开发、插件定制)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Timers; [assembly: CommandClass(typeof(IfoxDemo.Commands))] namespace IfoxDemo {// 新增的圆形闪烁命令实…...
Spark SQL to_json 函数介绍
目录 前言函数介绍参数说明示例 前言 在Apache Hive中,并没有内置的to_json函数。在Apache Spark SQL中确实有to_json函数,它可以用来将结构化数据(如结构化类型或MAP类型)转换为JSON字符串。这个功能对于需要将表格数据输出为JSON格式的场景…...
5个免费的硬盘分区工具,操作简单功能全
电脑用久了,系统盘空间告急、数据盘混乱无序,很多人想重新分区,却又担心太复杂或怕搞坏硬盘。其实,只要用对工具,分区操作其实一点都不难。更重要的是,有很多免费的分区软件,不仅好用࿰…...
uniapp事件onLoad区分大小写
区分大小写。不然会不起作用。onLoad方法中的功能均不会被执行。 除了功能逻辑要检查外。大小写是要认真检查的一部分...
Flutter Riverpod 使用详细解析
📚 Flutter 状态管理系列文章目录 Flutter 状态管理(setState、InheritedWidget、 Provider 、Riverpod、 BLoC / Cubit、 GetX 、MobX 、Redux) setState() 使用详解:原理及注意事项 InheritedWidget 组件使用及原理 Flutter 中 Provider 的使用、注…...
算法打卡 day4
4 . 高精度算法 性质:数组或者容器从低位往高位依次存储大整数,方便进位。 4.1 高精度加法 给定两个正整数(不含前导 0),计算它们的和。 输入格式 共两行,每行包含一个整数。 输出格式 共一行,…...
权威认证!华宇TAS应用中间件荣获CCRC“中间件产品安全认证”
近日,华宇TAS应用中间件顺利通过了中国网络安全审查认证和市场监管大数据中心(CCRC)的信息安全认证,获得了IT产品信息安全认证证书。此次获证,标志着华宇TAS应用中间件在安全性、可靠性及合规性等方面达到行业领先水平,可以为政企…...
【Linux网络编程】多路转接IO(二)epoll
目录 epoll初识 epoll的相关系统调用 epoll的工作原理 epoll的优点 epoll的工作方式 水平触发 Level Triggered 工作模式 边缘触发 Edge Triggered 工作模式 对比LT和ET 理解 ET 模式和非阻塞文件描述符 epoll的惊群问题 基于LT模式的epoll代码样例 epoll初识 按照man…...
flutter的包管理#资源管理#调试Flutter应用#Flutter异常捕获
2.5 包管理 2.5.1 简介 在软件开发中,很多时候有一些公共的库或 SDK 可能会被很多项目用到,因此,将这些代码单独抽到一个独立模块,然后哪个项目需要使用时再直接集成这个模块,便可大大提高开发效率。很多编程语言或开…...
Unity Netcode自定义数据传输——结构体及其序列化
在 Unity Netcode 中,要实现自定义数据的网络传输,确实需要两个关键部分: ✅ 两个必需组件: 数据结构定义 public struct PlayerState : INetworkSerializable {public int id; // 字段1:玩家IDpublic bool …...
Vue 3 高级编程技巧
Vue 3 高级编程技巧 1. 计算属性 (Computed Properties) 含义:计算属性在依赖变化时会自动更新。以下是一个示例,展示当 firstName 或 lastName 变化时,fullName 也会更新。 实例: <script setup> import { ref, comput…...
GraphQL注入 -- GPN CTF 2025 Real Christmas
part 1 服务器会每段时间禁用已注册的账号,此处存在漏洞 def deactivate_user_graphql(email):graphql_endpoint current_app.config["GRAPHQL_ENDPOINT"]query f"""mutation {{deactivateUser (user: {{email: "{email}"}}){{ success…...
python打卡day43
疏锦行 作业: kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms# 数据预处理 tra…...
ethers.js express vue2 定时任务每天凌晨2点监听合约地址数据同步到Mysql整理
下面是一个完整的 Ethers.js Express Vue2 MySQL 实现方案,用于: 💡每天凌晨 2 点监听某合约地址的 Transfer 事件,写入 MySQL 数据库,并展示每日 NFT 交易量图表(Vue2 ECharts) ✅ 后端部分…...
内网穿透和端口映射的区别在哪?局域网提供互联网访问方案对比选择详解
内网穿透和端口映射是两个经常被提及的概念,它们对于实现网络中的内外网通信起着关键作用。内网穿透和端口映射都能够有效地将本地局域网地址提供给互联网上外网访问,但二者之间存在着显著的区别。 内网穿透与端口映射的核心区别在于实现方式和依赖条件…...
机器学习---正则化、过拟合抑制与特征筛选
专栏:机器学习 个人主页:云端筑梦狮 注:上一篇机器学习还差一小节,日后坑必会填上 一.正则化 什么是正则化 / 如何进行正则化 其实机器学习中正则化(regularization)的外在形式非常简单,就是在模型的损失函数中加…...
优化 ArcPy 脚本性能
合理设置环境变量 优化环境变量配置 ArcPy 提供了许多环境变量,用于控制地理处理工具的行为。合理设置环境变量可以优化脚本的性能。例如,设置“workspace”环境变量可以指定默认的工作空间,避免在脚本中重复指定工作空间路径。 Python 复制…...
Robyn高性能Web框架系列06:使用WebSocket实现产品智能助理
使用WebSocket实现产品智能助理 WebSocket原理与应用场景Robyn的WebSocket基本使用1、创建WebSocket服务2、侦听WebSocket事件3、向客户端发送消息4、向客户端广播消息5、使用查询参数6、主动关闭连接 示例:简易的产品智能助理1、产品数据部分2、产品信息部分3、智能…...
UDP 缓冲区
UDP 有接收缓冲区,没有发送缓冲区 引申问题 1、为什么没有发送缓冲区? 直接引用原文 “因为 UDP 是不可靠的,它不必保存应用进程的数据拷贝,因此无需一个真正的发送缓冲区” 2、没有发送缓冲区的情况下,sendto 的数…...
物联网与低代码:Node-RED如何赋能工业智能化与纵横智控的创新实践
在数字化浪潮席卷全球的今天,物联网(IoT)已从概念走向现实,成为连接物理世界与数字世界的关键桥梁。它通过将日常物品、工业设备等“物”嵌入传感器、软件及其他技术,使其能够通过网络相互连接并交换数据,从…...
【甲方安全视角】开源的安全悖论
文章目录 安全的充分必要条件:从「符号化信任」到「验证驱动安全」构建与分发的不可信链条迭代与审计的节奏错位代码透明与攻击面的对等暴露对普通用户的建议选择可信项目与品牌始终通过官方渠道获取软件注意权限与环境安全对“签名请求”、“连接钱包”等敏感操作保…...
GEO生成式引擎优化发展迅猛:热点数智化传播是GEO最佳路径
在人工智能技术浪潮的推动下,GEO生成式引擎优化已跃升为行业技术演进与产业发展相融合的核心赛道。通过系统性梳理其发展脉络,我们可清晰勾勒出技术突破与产业变革交织的演进轨迹,其发展进程包含以下重要节点。 2023年4月,GPT-4发…...
【unity游戏开发——网络】计算机网络中的三种数据管理模型(分散式、集中式、分布式)和三大通信模型(C/S、B/S、P2P)
注意:考虑到热更新的内容比较多,我将热更新的内容分开,并全部整合放在【unity游戏开发——网络】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、数据管理模型1、分散式 (Decentralized - 各管各的)2、集中式 (Centra…...
MR30分布式 IO在物流堆垛机的应用
在现代物流行业蓬勃发展的浪潮中,物流堆垛机作为自动化仓储系统的核心设备,承担着货物的高效存取与搬运任务。它凭借自动化操作、高精度定位等优势,极大地提升了仓储空间利用率和货物周转效率。然而,随着物流行业的高速发展&#…...
香港维尔利健康科技集团推出AI辅助医学影像训练平台,助力医护人才数字化转型
香港维尔利健康科技集团近日正式发布其自主研发的“AI辅助医学影像训练平台(V-MedTrain)”,这一创新平台的上线,标志着医学影像教育迈入智能化辅助教学新时代。依托人工智能与大数据分析技术,香港维尔利健康科技集团在…...