当前位置: 首页 > news >正文

浏览器直达服务器串口:百敖基于 openUBMC 的 Web SOL 技术实践

作者:汪涛,南京百敖软件有限公司技术总监,openUBMC技术委员会委员,在BMC、BIOS等固件领域从事研发14年,多次承担国家科技支撑计划,拥有丰富的服务器固件领域研发经验。

引言

在服务器运维中,当系统宕机、无法启动或网络中断时,串口控制台往往是诊断和恢复的核心途径。传统方式依赖专用客户端软件,部署复杂、跨平台不便,尤其在紧急场景下效率低下。

为此,南京百敖团队基于 openUBMC架构,实现了 Serial Over LAN(SOL)功能的 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

http://www.cnnetsun.cn/news/4026181.html

相关文章:

  • 企业微信 iPad 协议 SCRM 开发效果实测
  • RAG的向量数据库:为LLM提供语义搜索能力
  • 【C++】13. 继承
  • Go 语言入门笔记(一):从零搭环境到跑通第一个程序
  • Windows 11 越来越卡?Win11Debloat 一键系统优化与隐私清理终极指南
  • 流放之路价格查询终极助手:这款免费开源工具,5分钟告别手动比价
  • 猫抓资源嗅探扩展使用路线图:3个成长阶段,把网页视频音频图片全拿下
  • 不用模拟器也能在 Windows 上装安卓应用:APK Installer 三步入门指南
  • 动态规划专练:力扣第1035、392题
  • 十大最佳 AI 编码工具
  • 混合办公两难:视频会议私有化部署频频失守的真相
  • 第一次让 AI 帮你写代码:用 JavaScript 完成一个待办事项清单
  • C语言基础:操作符详解(一)
  • 中级开发者用 AI,最容易掉进的 5 个坑
  • 从Cursor到多智能体:2026年AI全栈开发工具到底该怎么选?
  • 误删、格式化、硬盘罢工之后:TestDisk与PhotoRec免费数据恢复工具完整自救手册
  • 微信投票活动全攻略:从选工具到落地执行
  • maxGraph图表库实战:几分钟上手,从零构建可交互的流程图应用
  • WebPShop 插件完整使用指南:Photoshop 导出 WebP 与制作动画的免费教程
  • 从技术骨干到管理者,最大的转变不是能力,是角色和逻辑
  • 技术解析|音频分割在哪里切才不爆音?过零点与淡入淡出的四个关键细节
  • Windows 10/11 窗口毛玻璃特效实操指南:效果怎么选、怎么落地一次讲透
  • G-Helper完整上手指南:10分钟掌握华硕笔记本的功耗、风扇与显卡控制
  • 算法(23):heapsort-8.3一种先构建再排序的排序方法
  • 测试开发学习中。。。。
  • 基于linux上的终端贪吃蛇
  • 【论文翻译】SCNET: SPARSE COMPRESSION NETWORK FOR MUSIC SOURCE SEPARATION
  • 华硕笔记本控制工具G-Helper打不开?完整启动排查手册:5招让双击重新有反应
  • Socket编程:客户端与服务器通信全解析(网络编程)
  • 如何为Cocos Creator +微信小游戏项目建立一套可长期执行的性能治理体系?