news 2026/9/16 16:27:36

God‘s Eye View实时3D地球:14个数据源服务端代理架构的完整设计模式指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
God‘s Eye View实时3D地球:14个数据源服务端代理架构的完整设计模式指南

God's Eye View实时3D地球:14个数据源服务端代理架构的完整设计模式指南

【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view

God's Eye View 是一款开源的实时 3D 地球可视化项目,它像一部间谍卫星模拟器,但喂给它的全是真实公开数据——活体航班、船只、卫星、地震、公共摄像头和广播电台。这些"卫星画面"并非魔法,背后是server/providers/目录下 14 个数据源代理(proxy)组成的服务端架构:浏览器只请求本地服务,密钥与配额全部留在服务器端。本文带你从新手视角看懂这套服务端代理架构的设计模式。

🌐 什么是服务端代理?14 个数据源总览

所谓服务端代理(server-side proxy),就是浏览器不直接访问 OpenSky、NASA、TomTom 等第三方 API,而是先请求本地 Vite 开发服务器,由它代为转发、缓存、限流。这样带来三个好处:

  • 🔒密钥不出服务器:OpenAI、AISStream、Google 等私密凭证只有服务端可见
  • 缓存与省配额:内存 + 磁盘两级缓存,重复请求不再打上游
  • 🛡️防御上游风险:字节上限、SSRF 防护、错误脱敏

14 个顶层代理文件与它们背后的数据源如下表:

代理模块数据源地球上的角色
cctv.js城市摄像头 API(Austin、London、Tallinn 等)公共摄像头投射进 3D 城市
firms.jsNASA FIRMS🔥 全球活跃火点
gbfs.jsGBFS 共享单车标准🚲 单车站点实时状态
military-installations.jsOpenStreetMap 社区数据🎖️ 军事设施标注
openai.jsOpenAI Realtime API🎙️ 语音 AI 与 AI HUD 摘要
overpass.jsOverpass (OSM)道路、边界等矢量数据
places.jsGoogle Places地点搜索与路线
radio.jsRadio Browser📻 全球电台调谐器
regional.js区域新闻 / 天气 API驾驶舱简报条
space.jsCelesTrak + Launch Library 2🛰️ 卫星目录与发射回放
terrain.jsRe:Earth地形点高度查询
traffic.jsTomTom🚦 实时车流速度
live.jsOpenSky / adsb.lol / AIS✈️ 实时航班与船只聚合
local.js—(装配器)按序注册全部插件

复杂的数据源还会拆进子目录,如 aircraft/、cctv/、vessels/,每个子模块只负责一小段职责(查询、缓存、传输分离)。

⚙️ 设计模式一:Vite 插件工厂

每个代理都导出一个"工厂函数",返回一个 Vite 插件对象。以 terrain.js 为例,它返回{ name, configureServer, configurePreviewServer }——configureServer把一段中间件挂到固定的/api/*路由上:

// 所有代理的统一外形(示意) export function terrainHeightsProxy() { const installMiddleware = (server) => { server.middlewares.use('/api/terrain/heights', async (req, res) => { /* … */ }); }; return { name: 'terrain-heights-proxy', configureServer: installMiddleware, /* … */ }; }

真正的"总装配线"在 local.js:localProviderPlugins()固定顺序返回 20 个插件实例(OpenSky → CelesTrak → TomTom → … → Google Places),根目录 vite.config.js 只做一行重导出。这意味着新增一个数据源 = 写一个工厂函数 + 在列表里加一行,完全解耦——这正是 README 所说"每一层都是可替换的模块"的工程落地。

🧱 设计模式二:共享基建common/

所有代理不重复造轮子,公共能力集中在 common/:

  • 字节上限读请求/读响应:common/request.js 对入站 body 强制上限;common/http.js 对上游响应边流边计数,超限立即掐断,防止恶意上游把代理内存打爆
  • 请求合并(single-flight):coalesceProxyRequest 让同一时刻的相同请求共享一次上游调用
  • 固定窗口限流:common/rate-limit.js 按"真实 socket 地址"限流,明确不信任X-Forwarded-For头(客户端可控,伪造即可绕过)——这是一个很值得新手学习的防御细节

💾 设计模式三:两级缓存 + 陈旧兜底

数据"不会变"与"会变化"采用不同策略:

  • 慢变数据(如 terrain.js 的地形高度):按坐标点做键,内存 Map + 磁盘 JSON 文件,TTL 长达 30 天,重启后自动从磁盘恢复
  • 快变数据(如 overpass.js 的 OSM 查询):内存缓存按规范化后的查询串做键,并发相同查询合并为一次上游请求;响应头附带X-Overpass-Cache: HIT/MISS/STALE,方便调试时看清命中路径
  • 陈旧兜底(serve-stale):当所有上游镜像都失败时,Overpass 代理宁可返回"任何年龄"的最后成功结果,也不让道路图层闪空——"旧的路,好过没有路"

🛡️ 设计模式四:安全加固

这套代理被 README 称为"hardened server-side proxy",核心防线:

  1. 服务端凭证:浏览器永远看不到OPENAI_API_KEY等私密值,客户端只拿到短时效会话令牌,逻辑见 openai/realtime.js
  2. SSRF 防护:如电台代理用isPublicRadioAddress校验上游地址,防止被诱导去请求内网
  3. 每 IP 可选限流:makeOptInRateLimiter 默认不启用,通过环境变量开启"每分钟 N 次/每 IP",全局兜底值为单 IP 上限的 20 倍
  4. 错误脱敏:上游异常统一返回简洁的 JSON 错误(如"terrain heights proxy error"),不泄露内部细节

📹 眼见为实:代理驱动的真实图层

CCTV 代理把城市摄像头姿态(朝向/俯仰)估计后投射进 3D 空间——你还能拖拽相机上的 gizmo 手动校准。下面是 Austin 路口的活体摄像头画面:

TomTom 代理则把真实车流速度"喂"给仿真层:城市级拥堵颜色一路下钻,直到钻进同一路口的摄像头视角:

🚀 新手如何扩展一个新数据源?

照着既有模式,四步即可:

  1. 在 server/providers/ 下新建mymodule.js,实现返回{ name, configureServer }的工厂函数
  2. 用 common/http.js 的带上限读取函数处理请求与响应
  3. 在 local.js 的插件列表里注册一行
  4. 浏览器端写一个同目录模式的 data 模块(参考 src/data/)去消费/api/mymodule

📚 关键文件路径速查

路径说明
server/providers/local.js14 个代理的统一装配点
server/providers/overpass.js限流 + 缓存 + 请求合并的完整范例
server/providers/terrain.js两级缓存设计注释最详尽的模块
server/providers/common/rate-limit.js固定窗口限流器实现
vite.config.js代理插件的入口
DATA_SOURCES.md全部数据源与授权说明

God's Eye View 的服务端代理架构用"小工厂 + 共享基建 + 分层缓存 + 安全加固"四个模式,把 14 个互不相同的第三方数据源缝成了一个稳定、可审计、可离线启动的实时 3D 地球。想要亲手拆解,从server/providers/terrain.js的注释读起,是成本最低的入口。

【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 16:22:52

RTranslator终极指南:Android免费离线实时翻译应用快速上手

RTranslator终极指南:Android免费离线实时翻译应用快速上手 【免费下载链接】RTranslator Open source real-time translation app for Android that runs locally 项目地址: https://gitcode.com/GitHub_Trending/rt/RTranslator RTranslator 是一款免费的开…

作者头像 李华
网站建设 2026/9/16 16:20:25

系统提示词泄露风险与防护:AI应用安全排查实战指南

系统提示词泄露:一次从“前端能看到”到“后端全裸奔”的排查实录可能有不少人会嘀咕:系统提示词(system prompt)不过是一段给大模型看的“开场白”,泄露了能怎样?我最初也这么想,直到有一次帮朋…

作者头像 李华
网站建设 2026/9/16 16:20:16

麻婆豆腐怎么做才正宗?从焯水到三道芡,拆解川菜八字诀

说实话,麻婆豆腐是那种“看着简单,一做就废”的菜。我最初做麻婆豆腐,完全是按菜谱照搬:豆腐切块,肉末下锅,豆瓣酱炒一炒,加水煮,勾芡,起锅撒花椒面。结果做出来一碗味道…

作者头像 李华