在 Homepage 中集成 GameDig Widget:游戏服务器状态监控的配置指南与源码解析

发布时间:2026/9/10 13:07:44

在 Homepage 中集成 GameDig Widget:游戏服务器状态监控的配置指南与源码解析 在 Homepage 中集成 GameDig Widget游戏服务器状态监控的配置指南与源码解析【免费下载链接】homepageA highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.项目地址: https://gitcode.com/GitHub_Trending/ho/homepage本指南面向在 Homepage 自建导航/仪表盘中部署 GameDig Widget 的开发者讲解如何通过 services 配置为任意受支持的游戏服务器添加在线状态、地图、玩家数与延迟监控。你将掌握serverType、url、gameToken等核心参数的配置方法、可显示字段的选取规则并通过源码链路理解数据从前端请求到 GameDig 探测返回的完整流程。GameDig Widget 能做什么GameDig 是一个基于 node-gamedig 库封装的 Homepage 服务组件。它本身不维护任何游戏协议实现而是借助 GameDig 库统一封装了大量游戏服务器的查询协议因此理论上任何 node-gamedig 支持的服务器类型CS:GO/CS2、Minecraft、Valheim、ARK、Rust、Terraria 等数百种都可以通过同一套配置接入 Homepage 仪表盘实时展示服务器是否在线服务器名称与当前地图当前在线玩家数 / 最大玩家数机器人Bots数量网络延迟Ping。快速开始在 services.yaml 中配置 Widget在 Homepage 的服务配置默认骨架文件为 src/skeleton/services.yaml实际运行时使用部署目录下的services.yaml中为一个服务条目添加widget块即可启用- 我的游戏服务器: - CS:GO 服务器: icon: sh-gamepad # 可选按需指定 href: steam://connect/server.host.or.ip:port # 可选跳转地址 widget: type: gamedig serverType: csgo # 见 node-gamedig 的 games-list 文档 url: udp://server.host.or.ip:port gameToken: # 可选部分游戏查询时需要的 token参数说明参数是否必填说明type必填固定为gamedig用于声明启用 GameDig WidgetserverType必填游戏服务器类型标识如csgo、minecraft、valheim。完整取值列表以 node-gamedig 项目维护的 games-list 为准node-gamedig 文档中的type字段列表Homepage 直接透传给 GameDig 库url必填服务器地址格式为udp://主机名或IP:端口也支持其他协议前缀见下文解析逻辑gameToken可选某些游戏如部分使用独立 Query 认证的服务器查询时需要携带的 token配置后会被原样传递给 GameDigurl 与 serverType 的匹配要点url中的端口是 GameDig 发起探测的目标端口serverType则决定使用哪套协议解析响应两者必须与目标服务器实际运行的游戏及端口一致否则查询将失败并显示为离线。serverType使用的是 GameDig 库内部的类型标识例如csgo并非游戏发行名配置前应先在 node-gamedig 的 games-list 中确认目标游戏对应的准确标识。地址写法同时兼容域名与 IP例如udp://play.example.com:27015或udp://192.168.1.10:27015。可显示字段与数量限制GameDig Widget 允许在配置中通过fields控制展示哪些信息。允许的字段全集为来自 docs/widgets/services/gamedig.mdwidget: type: gamedig fields: - status - name - map - currentPlayers - players - maxPlayers - bots - ping各字段含义如下字段显示内容离线时的表现status在线状态Online / OfflineOfflinename服务器名称-map当前地图-currentPlayers当前玩家数 / 最大玩家数如5 / 10-players当前在线玩家数-maxPlayers最大玩家数-bots机器人数量-ping网络延迟毫秒-字段展示规则由源码确认在 src/widgets/gamedig/component.jsx 中字段的选取遵循两条硬性规则默认字段当配置中未指定fields或为空数组时自动使用[map, currentPlayers, ping]三个字段数量上限无论配置了多少字段最多只展示前 4 个MAX_ALLOWED_FIELDS 4超出部分会被截断。例如配置了全部 8 个字段实际只会渲染前 4 个。// 来自 src/widgets/gamedig/component.jsx if (widget.fields null || widget.fields.length 0) { widget.fields [map, currentPlayers, ping]; } const MAX_ALLOWED_FIELDS 4; if (widget.fields ! null widget.fields.length MAX_ALLOWED_FIELDS) { widget.fields widget.fields.slice(0, MAX_ALLOWED_FIELDS); }因此建议在配置时直接挑选最关心的 4 个字段例如widget: type: gamedig serverType: minecraft url: udp://mc.example.com:25565 fields: - status - name - currentPlayers - ping字段的界面标签Status、Map、Current players、Ping 等由多语言文件 public/locales/en/common.json 中的gamedig命名空间提供Homepage 会随界面语言自动切换。源码剖析数据链路如何工作GameDig Widget 的完整请求链路为前端组件 →/api/widgets/gamedig/status代理接口 → GameDig 库查询游戏服务器 → 返回结构化状态。下面沿着 src/widgets/gamedig/widget.js 与 src/widgets/gamedig/proxy.js 逐层拆解。1. Widget 注册与端点约束src/widgets/gamedig/widget.js 中声明了该 Widget 的代理处理器并只允许status这一个端点被访问const widget { proxyHandler: gamedigProxyHandler, allowedEndpoints: /status/, };前端通过 src/utils/proxy/use-widget-api.js 中的useWidgetAPI(widget, status)发起请求见 src/widgets/gamedig/component.jsx 第 9 行因此实际只会命中status端点。2. 代理处理器组装 GameDig 查询参数src/widgets/gamedig/proxy.js 是核心实现其工作流程如下通过getServiceWidget(group, service, index)从配置或 Docker / Kubernetes 发现的服务中取出当前服务的 widget 配置见 src/utils/config/service-helpers.js使用new URL(serviceWidget.url)解析用户配置的地址从中拆出主机名hostname与端口port组装 GameDig 查询选项并调用GameDig.query(...)const gamedigOptions { type: serviceWidget.serverType, host: url.hostname, port: url.port, givenPortOnly: true, checkOldIDs: true, }; if (serviceWidget.gameToken) { gamedigOptions.token serviceWidget.gameToken; } const serverData await GameDig.query(gamedigOptions);这里有两个值得注意的实现细节givenPortOnly: true只向配置中给定的端口发起查询避免 GameDig 因某些游戏存在多个端口如查询端口与游戏端口不同而自动遍历探测checkOldIDs: true允许同时匹配已更名的游戏旧 ID提升兼容性gameToken仅当配置了gameToken时才附加到查询选项中且该字段在 src/utils/config/service-helpers.js 的 widget 白名单中type gamedig时透传gameToken不会被误传给其他类型的 widget。3. 响应数据结构化查询成功后代理将 GameDig 的原始返回映射为统一结构并返回 HTTP 200res.status(200).send({ online: true, name: serverData.name, map: serverData.map, players: serverData.numplayers ?? serverData.players?.length, maxplayers: serverData.maxplayers, bots: serverData.bots.length, ping: serverData.ping, });注意players字段对两种 GameDig 返回形态做了兼容优先使用numplayers数字否则回退到players数组的长度。4. 离线与异常处理当查询抛出异常服务器不可达、超时、协议不匹配等时代理仍然返回 HTTP 200但只包含online: falseres.status(200).send({ online: false, });这样设计的目的是把探测失败作为一种正常业务状态交给前端处理而不是让整个页面报错。前端组件会据此显示 Offline并将各字段渲染为-见 src/widgets/gamedig/component.jsx 第 41-50 行。5. 前端渲染src/widgets/gamedig/component.jsx 在数据未返回时先渲染全部 8 个字段的占位块数据到达后按照前面提到的默认字段与 4 字段上限规则只渲染用户关心的字段。ping字段还会通过highlightValue高亮展示便于快速识别延迟异常。测试验证行为有据可依该 Widget 的两类核心行为均有测试覆盖src/widgets/gamedig/proxy.test.js 验证代理层两个关键场景查询成功时返回online: true及服务器详情name、players、maxplayers 等查询失败时返回online: false。src/widgets/gamedig/component.test.jsx 验证前端规则未配置fields时默认字段为[map, currentPlayers, ping]配置 5 个字段时被截断为前 4 个且在线状态渲染为5 / 10形式的玩家数。完整配置示例真实可用的仪表盘片段将上述内容组合成一个完整的 services 片段含多个服务器可直接放入services.yaml使用- 游戏: - CS2 服务器: icon: sh-csgo href: https://www.dota2.com/play # 替换为你的实际入口 widget: type: gamedig serverType: csgo url: udp://cs.example.com:27015 fields: - status - map - currentPlayers - ping - Minecraft 服务器: icon: sh-minecraft widget: type: gamedig serverType: minecraft url: udp://mc.example.com:25565 gameToken: # 如服务器开启了查询认证在此填写 token fields: - status - name - players - maxPlayers使用提示GameDig Widget 的请求由 Homepage 后端代理发出而非浏览器直连因此即使游戏服务器位于内网或仅 UDP 可达只要 Homepage 所在主机能访问目标地址即可正常工作若服务器经常显示离线优先检查serverType是否为目标游戏的准确类型标识、url端口是否与查询端口一致、目标服务器是否开启了查询响应部分服务器需显式启用 Query 端口该 Widget 也可用于通过 Docker 标签或 Kubernetes 注解发现的服务只需在对应服务上声明同样的widget块即可配置字段完全一致字段标签文案可通过 public/locales/en/common.json 的gamedig命名空间及各语言翻译文件进行本地化多语言支持由 next-i18next.config.js 驱动的国际化体系承载。至此你已掌握 GameDig Widget 从配置声明、字段控制到后端探测与前端渲染的完整链路可以据此在 Homepage 中快速接入任意受支持的游戏服务器监控并在遇到异常时按源码逻辑定位问题。【免费下载链接】homepageA highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.项目地址: https://gitcode.com/GitHub_Trending/ho/homepage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 13:02:44

MATLAB疲劳驾驶检测系统:嵌入式部署与光照鲁棒性实现

简介:本资源是一套基于MATLAB实现的疲劳驾驶检测算法系统,面向智能交通、计算机视觉初学者及高校课程设计者,解决驾驶员状态实时监测中的关键问题。算法通过分析眼睛闭合频率、哈欠动作等生理特征判断疲劳状态,并提供可视化GUI交互…

2026/9/10 13:02:43

工业机器人减速器技术演进与核心创新解析

1. 减速器技术发展概述 十年前我第一次拆解工业机器人减速器时,那个充满油脂和金属碎屑的齿轮箱让我印象深刻。如今再打开最新型号的谐波减速器,精密的机电一体化设计简直像艺术品。减速器作为动力传动的核心部件,其演进历程正是现代工业技术…

2026/9/10 14:13:06

5分钟定位单帧卡顿:Tracy Profiler 帧分析器实战用法

5分钟定位单帧卡顿:Tracy Profiler 帧分析器实战用法 【免费下载链接】tracy Frame profiler 项目地址: https://gitcode.com/GitHub_Trending/tr/tracy 某帧突然从 16ms 飙到 80ms,日志里却查不到热点在哪。Tracy Profiler(实时帧分析…

2026/9/10 14:13:06

Java日期转换异常解析:sql.Date与util.Date差异

1. 异常现象解析:当Date.toInstant()抛出UnsupportedOperationException最近在排查一个历史数据导出功能时,遇到了这个典型的运行时异常:java.lang.UnsupportedOperationException: null at java.sql.Date.toInstant(Date.java:304)这个报错发…

2026/9/10 14:13:06

校园生活信息平台架构设计与SpringBoot+Vue实践

1. 项目概述:校园生活信息平台的架构设计这个校园生活信息管理系统采用前后端分离架构,后端基于SpringBoot框架搭建RESTful API服务,前端使用Vue.js构建响应式用户界面。系统主要服务于高校师生,整合了课程查询、校园公告、失物招…

2026/9/10 14:13:06

东方财富股吧爬虫与财经舆情分析实战指南

简介:这是一份面向计算机专业学生与初阶开发者设计的股市舆情分析实践项目,聚焦东方财富股吧数据采集与情感挖掘,适用于毕业设计、课程设计及科研原型验证。资源包含14个文件,涵盖4个核心Python脚本(main.py、crawler.…

2026/9/10 14:07:55

保密技术专业毕设选题:信息安全与加密技术实践

1. 保密技术专业毕设选题方向解析作为保密技术专业的核心方向,信息安全领域每年都会涌现出大量具有研究价值的课题。对于2026届毕业生而言,选择既符合专业要求又具备创新性的毕设题目尤为关键。从当前技术发展趋势来看,文件加密、信息隐藏和隐…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码