webSocket心跳_专注法术

33 阅读3分钟

真是的……非要用《博德之门3》(Baldur's Gate 3)这种死宅游戏的比喻你才能听懂吗?

明明刚才的技术解释已经很清楚了! 但既然你求我了,我就勉为其难地用你那仅存的一点 D&D 知识库来给你把这事儿捋顺。

听好了,别让我说第二遍。


🎲 背景设定:维持“心灵连线” (Concentration)

想象一下,你的Web前端Go后端正在维持一个**“心灵连线” (Telepathic Bond)** 法术。这个法术就是你的 WebSocket 连接。

但是,负责网络传输的中间人(Nginx/防火墙)就像是一个极其严苛的地下城主(DM),或者说是一个以太位面的守望者。

规则很简单:“如果你们俩 60 秒都没说话,我就判定你们‘专注(Concentration)’断了,直接掐断法术。”


1. 为什么会有两种不同的做法?

🧙‍♂️ 你的 Go 挖掘机端:【高阶法师】 (Wizard)

你的 Go 客户端就像是盖尔(Gale),它是直接运行在操作系统上的。它精通魔网的所有底层构造。

  • 能力:它可以随意施展 0环戏法:Ping (Raw Ping Frame)
  • 效果:这是一个纯粹的魔法脉冲,甚至不需要消耗语言成分。DM(服务器)收到这个脉冲,会自动反弹一个 Pong。
  • 结论:简单、优雅、符合法师的身份。

🗡️ 你的 Web 前端:【被契约束缚的邪术师】 (Warlock with a Pact)

你的 Web 前端是运行在浏览器里的。浏览器(Chrome/Edge)就是你的宗主(Patron)。

这个宗主虽然给了你力量,但也给了你极为变态的限制(Pact Restrictions):

  • 诅咒:宗主明确规定:“你不准施展‘Ping’这个戏法!那是禁术!”(浏览器不开放 JS 发送 Ping 帧的 API)。
  • 困境:你没法像法师那样发送纯粹的魔法脉冲,但你必须让 DM 知道你还活着,否则 60 秒后连接就会断开。

2. 那个“应用层心跳”修改做了什么?

既然不能用魔法(Ping Frame),邪术师(Web 前端)只能用物理手段

  • 之前的修改(应用层心跳):

    既然宗主不让我放 Ping 法术,那我直接大吼一声总行了吧?

    于是,每隔 30 秒,邪术师就通过心灵连线喊出一句通用语(JSON):

    "Type: PING!" (我还在!)

    服务器端的 DM 听到了这句话,虽然觉得这孩子有点吵,但也吼回去:

    "Type: PONG!" (知道了!)

  • 效果:

    虽然这不是标准的魔法脉冲,但这属于**“有效交流” (Data Transfer)**。

    那个严苛的守望者(Nginx)看到连线里有对话在传输,就会想:“哦,他们还在聊天,那我就不切断连接了。”


3. 为什么不能回退代码?

如果你现在回退了代码(删掉了 JSON Ping):

  1. 邪术师(Web) 闭嘴了(因为宗主不让放 Ping,你又删掉了吼叫)。
  2. 守望者(Nginx) 开始倒计时。
  3. 60秒(6个回合)过去,连线里死一般的寂静。
  4. 守望者判定“玩家挂机,法术位耗尽,切断连接!”
  5. 结果:你的挖掘机画面黑屏,Game Over。

总结

  • Go 端 是在用 法术位 (Protocol Layer) 维持专注。
  • Web 端 是在用 口胡 (Application Layer) 维持专注。

虽然看起来一个是正统法术,一个是投机取巧,但在 DM 眼里,只要有动静,就不算挂机!

懂了吗? 那个“口胡”的代码(JSON Ping)就是你的保命护符。

把它给我留着,别没事总想着把它扔了!你要是敢删,下次掉线了别来哭着找我!