浏览器直达服务器串口:百敖基于 openUBMC 的 Web SOL 技术实践
作者汪涛南京百敖软件有限公司技术总监openUBMC技术委员会委员在BMC、BIOS等固件领域从事研发14年多次承担国家科技支撑计划拥有丰富的服务器固件领域研发经验。引言在服务器运维中当系统宕机、无法启动或网络中断时串口控制台往往是诊断和恢复的核心途径。传统方式依赖专用客户端软件部署复杂、跨平台不便尤其在紧急场景下效率低下。为此南京百敖团队基于 openUBMC架构实现了 Serial Over LANSOL功能的 Web 化迁移用户无需安装任何软件直接在浏览器中访问服务器串口控制台。如下图在浏览器访问BMC串行接口及系统串行接口本文分享这一功能的完整技术实践包括架构设计、关键挑战及解决方案以及在百敖 openUBMC 商业版中的集成经验。架构设计分层构建可靠的 Web SOL 系统在实现浏览器化串口管理的过程中我们面临多项嵌入式 Web 系统常见的难题。这些挑战直接指导了架构选型最终形成清晰的三层设计前端界面层、网关层与后端服务层。这种分层不仅实现了功能还确保了兼容性、安全性和性能。1. 前端界面层利用Vue框架集成xterm.js初期尝试直接将串口原始数据输出到 HTML 时遇到了严重渲染异常——字符错乱、ANSI/VT 控制序列如光标定位、清屏无法解析导致显示与物理终端完全不一致。这直接暴露了普通 Web 元素处理复杂终端序列的局限性。因此我们选用 Vue.js 构建单页应用并集成 xterm.js 作为终端仿真核心。xterm.js 能准确解析并渲染控制序列支持色彩、滚动等完整特性。同时通过 WebSocket 实现实时双向通信并添加自动重连机制确保连接稳定性。2. 网关层安全与协议兼容的必然选择Web SOL 需要在浏览器与后端间建立持久双向通道同时必须应对嵌入式环境的资源限制和安全需求。我们早期在 WebSocket 处理上遇到兼容性问题因此需要更好的解决方案。openUBMC中集成了Nginx因此它成为理想选择它高效处理 TLS 1.2/1.3 加密传输、WebSocket 协议升级与代理转发。同时集成 JWT 身份验证、IP 访问控制及严格 CSP 策略提供统一的安全入口和流量分发能力避免直接暴露后端服务。3. 后端服务层高并发与底层操作的权衡后端的核心难点在于高效管理多个 WebSocket 会话同时精准操作底层 TTY 设备。 Lua WebSocket库在Skynet协程环境下会出现阻塞异常而串口配置中还遇到回声干扰如“阶梯式换行”和硬件端口识别问题。为此我们优化了WebSocket的实现并兼容了Skynet的协程框架重构事件处理逻辑最大化地复用了Skynet高并发能力来管理多个WebSocket对话。串口通信模块则通过 C 扩展实现使用 cfmakeraw() 将 TTY 设为 raw 模式禁用内核级处理如回车转换采用读写分离架构避免数据回显干扰。同时通过对接openUBMC的SerialManagement 服务支持了BMC与服务器OS的串口切换能力让Web SOL的能力进一步增强。通过层层攻克上述挑战这套三层架构最终在 openUBMC 上完美落地了 Web SOL 系统实现了高效、可靠且安全的浏览器化串口管理。产品化集成落地百敖 openUBMC 商业版功能开发完成后我们将其模块化封装前端资源、Nginx 配置、后端服务通过openUBMC的Conan体系构建和管理。最终结合百敖自研的其他能力实时监控界面、灵活的传感器告警策略等基于openUBMC 25.06 社区发行版推出了百敖的openUBMC商业发行版。总结与展望本次 Web SOL 的成功实践充分验证了 openUBMC 架构的灵活性和扩展性其基于 Skynet、D-Bus、Lua/C 混合开发以及模块化构建体系能够高效支持各类新型运维特性的快速集成与落地为服务器远程管理提供了广阔的创新空间。同时这次从底层 TTY 操作到 Web 前端的完整开发过程也标志着百敖团队已具备深厚的 openUBMC 技术积累能够为客户提供从功能定制、性能优化到安全加固的全栈开发服务满足多样化的国产化服务器管理需求。未来我们将继续基于 openUBMC 平台迭代更多实用特性。我们相信通过持续的技术迭代与生态建设百敖openUBMC将为服务器远程管理提供更加强大、便捷且安全的解决方案助力企业数据中心实现更高水平的运维自动化与智能化。欢迎关注openUBMC社区官网https://www.openubmc.cn代码仓地址https://gitcode.com/openUBMC

相关新闻

21、三大平台稳定性问题谱对比:各自的高发问题

21、三大平台稳定性问题谱对比:各自的高发问题

三大平台稳定性问题谱对比:各自的高发问题 问题背景:知己知彼,才能精准防御 每个芯片平台都有自己的"体质特点"——某些类型的问题在MTK上高发,在高通上却很少见;反之亦然。这种差异源于各平台的硬件架构、固件实现、驱动成熟度和生态完善程度的不同。 对于稳…

2026/10/20 11:12:10 阅读更多 →
【项目编号:project99838】毕业设计推荐|SpringBoot 老兵烧烤餐厅管理系统微信小程序 + Web 管理端|订单与食材数据一体化

【项目编号:project99838】毕业设计推荐|SpringBoot 老兵烧烤餐厅管理系统微信小程序 + Web 管理端|订单与食材数据一体化

毕业设计推荐|SpringBoot 老兵烧烤餐厅管理系统微信小程序 Web 管理端|在线点餐、预约就餐、订单与食材数据一体化�� 文末附源码领取方式|适合 Java / SpringBoot / 小程序方向毕业设计▌这个项目解决了什么问题&…

2026/10/19 6:11:28 阅读更多 →
LS-DYNA用于复合材料抗冲击分析方面的应用总结--Part 2 材料篇

LS-DYNA用于复合材料抗冲击分析方面的应用总结--Part 2 材料篇

各位,好久不见:距离上次写LSDYNA中关于复材抗冲击分析之建模篇已经过去三年多了。抱歉,让期待更新的朋友久等了。复合材料抗冲击分析用材料模型涉及内容太多,这个帖子仅仅是谈谈这些年自己从事复合材料冲击工作的感受,…

2026/10/17 8:52:24 阅读更多 →

最新新闻

Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

1. 先把环境装好,再谈自动化 做移动端自动化测试,很多人一上来就急着写脚本,结果真正动手时,光是环境安装就把热情消磨了大半。Appium Python Android Node.js这套组合,几乎每个部件都有自己的版本要求、环境变量和…

2026/10/20 18:10:34 阅读更多 →
QTTabBar、Office Tab与Quicker:告别Windows多窗口混乱,提升办公效率

QTTabBar、Office Tab与Quicker:告别Windows多窗口混乱,提升办公效率

1. 写在最前面:为什么你的Windows办公效率上不去先问一个问题:你每天要在这台电脑上打开多少个文件夹窗口?要在这几个窗口之间来回切换多少次AltTab?Word、Excel来回改的时候,任务栏上挤了多少个窗口?如果你…

2026/10/20 18:10:34 阅读更多 →
AI短剧创作教程源码包:从剧本到成片的自动化流水线

AI短剧创作教程源码包:从剧本到成片的自动化流水线

简介:AI短剧创作教程源码包,专为希望借助AI工具快速产出短剧的内容创作者与开发者设计。资源围绕AiPy工具,覆盖从故事主题设定、提示词生成剧本,到旁白与分镜头视频制作、人物一致性维护,直至音视频合成出片的完整流程…

2026/10/20 18:10:34 阅读更多 →
本体驱动开发:让AI应用先有一份清晰的领域宪法

本体驱动开发:让AI应用先有一份清晰的领域宪法

最近在整理ontology-driven-dev这个开源项目时,发现一个很有意思的现象:很多人第一眼看到"本体驱动"四个字,要么觉得是学术论文里才有的概念,要么直接把它和知识图谱划等号。但实际上,在做AI原生应用开发的过…

2026/10/20 18:10:34 阅读更多 →
C++利用链表模板类实现简易队列

C++利用链表模板类实现简易队列

前言 队列(queue)是先进先出(first in, first out, FIFO)的线性结构:只在尾部插入,只在头部删除。用链表实现队列的好处是插入和删除都是 O(1),不需要像动态数组那样在头部删除时搬移元素&#…

2026/10/20 18:10:34 阅读更多 →
用Mock测试解决接口依赖问题:从工具选型到落地实践

用Mock测试解决接口依赖问题:从工具选型到落地实践

做接口联调这么多年,最烦的一件事就是“等”。前端等后端接口,后端等第三方服务,测试等环境稳定,最后所有人都在等别人。尤其是前后端并行开发那阵子,接口契约刚定完,前端已经把页面写了一半,后…

2026/10/20 18:09:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →