Hello World
这是使用 Next.js 14 重构的 Gal 主题博客的第一篇文章。 本博客采用以下技术栈: Next.js 14 - React 框架,使用 App Router TailwindCSS - 原子化 CSS 框架 shadcn/ui - 精美的 UI 组件库 Lucide Icons - 现代图标库 保留了原 Gal 主题的设计风格,同时使用现代化的技术栈重新实现。 得益于 Next.js 的...
.NET Redis 工具类封装实践
在 .NET 项目中使用 Redis,通常基于 库。本文介绍如何封装一个功能完整、易于使用的 Redis 工具类。 统一管理键名前缀,避免多项目键名冲突: 配置类示例: 使用示例: 这个 Redis 工具类封装了常见的 Redis 操作,具有以下特点: 统一键前缀:避免多项目键名冲突 对象序列化:自动 JSON 序列化/反序列化 连接管理:自动重连、事件通知 分布式锁:简单易用的锁操作 发布订阅:...
.NET WebSocket 实时通知服务设计
在工业监控系统中,前端需要实时展示设备状态、告警信息和各模块的在线状态。本文介绍如何使用 .NET WebSocket 实现一个统一的实时通知服务。 多客户端 WebSocket 连接管理 模块心跳监控与状态同步 日志推送与未读计数 用户会话踢出(单点登录配合) 使用 ConcurrentDictionary 管理 WebSocket 连接: 通过 Redis Pub/Sub 订阅各模块心跳: 使...
.NET 8 分布式工业控制系统架构设计
本文介绍一个基于 .NET 8 的分布式工业控制系统架构。该系统用于钢厂智能燃烧控制,包含以下核心模块: SteelMill.Api:Web API 服务,提供 RESTful 接口 SteelMill.Dms:数据采集服务,从硬件设备采集数据 SteelMill.Ice:算法引擎服务,执行控制算法 SteelMill.SoftDog:看门狗服务,监控其他服务状态 SteelMill.Client...
.NET 8 模块化初始化架构设计
在开发分布式系统时,我们常常会遇到这样的问题:不同模块(如 API 服务、数据采集服务、算法引擎)对基础设施的需求各不相同。API 模块需要完整的数据库、Redis、JWT 认证,而看门狗服务可能只需要 Redis。如何设计一个灵活的初始化架构来应对这种差异? 本文将分享一种基于 .NET 8 的模块化初始化模式。 首先定义一个配置类,用于控制各模块的初始化行为: 根据模块名称自动配置初始化选项:...
.NET 8 程序集动态加载机制
在某些部署场景中,我们需要将 DLL 文件放在独立的目录中,而不是与可执行文件放在一起。例如: 本文介绍如何使用 .NET 8 的程序集加载机制实现这种部署模式。 使用 特性在程序集加载时立即执行初始化代码: 当 .NET 运行时无法在默认路径找到程序集时,会触发 事件: 对于 P/Invoke 调用的原生 DLL(如 SQLite、OpenSSL),使用 : FileLoadException:...
.NET 实现 JWT + Redis 单点登录控制
在工业控制系统中,常常需要支持用户在多台工控机上同时登录,但每台机器的会话需要独立管理。传统的单点登录方案只允许一处登录,而完全放开又无法有效管理会话。 本文介绍一种基于 JWT + Redis 的方案,实现"同用户多设备独立会话"的登录控制。 在 JWT 中嵌入 (机器码)用于区分不同客户端: 使用 作为 Redis Key: 例如: - 用户1在机器abc123的Token - 用户1在机器d...
.NET 日志系统设计:缓冲 + 批量写入
在高并发场景下,每次日志都直接写入数据库会导致: 大量小事务,数据库压力大 日志写入阻塞业务逻辑 网络 I/O 成为瓶颈 采用 缓冲区 + 批量写入 + 定时刷新 三重机制。 日志先进入缓冲区,达到阈值时触发批量写入: 防止日志量少时长时间不写入: 程序退出时确保缓冲区日志全部写入: 利用 和 自动获取调用者信息: 从 HttpContext 中自动提取当前登录用户: 1000条日志耗时 5200...
TimescaleDB time_bucket 实现历史数据智能降采样
在工业监控系统中,传感器数据通常以每秒一条的频率存储。当用户查询一年的历史数据时,原始数据量可能达到 3000+ 万条,直接返回会导致: 数据库查询超时 网络传输压力大 前端图表渲染卡顿 本文介绍如何使用 TimescaleDB 的 函数实现智能降采样。 根据时间跨度选择合适的采样间隔,确保返回数据量不超过 20,000 条: 采样间隔 5 秒 5 秒 30 秒 5 分钟 30 分钟 当 时返回完...
CentOS Stream 9 中通过 Go 程序修改网络配置
本文档详细介绍如何在 CentOS Stream 9 系统中使用 Go 程序进行网络配置管理。主要涉及以下几个方面: NetworkManager 配置文件结构 网络接口识别 配置文件生成和保存 网络配置的应用 CentOS Stream 9 的网络配置文件存储在以下位置: 配置文件使用 作为扩展名,例如: 标准配置文件结构如下: 配置文件必须设置正确的权限: 使用 命令获取系统网络接口信息: 需...