Skip to content

feat(input): 有序主线程接入、完整包准入与生命周期归属 - #5

Draft
boybook wants to merge 6 commits into
masterfrom
codex/je-input-runtime
Draft

boybook wants to merge 6 commits into
masterfrom
codex/je-input-runtime

Conversation

@boybook

@boybook boybook commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

问题与方案

原 Synapse 在既有异步线程约10ms轮询,登录/游戏包/退出分别进入三类队列,再由主线程 Ticker 按类别消费。新模式复用原传输和解包线程,在实际入队时唤醒,将业务与控制输入按本机接纳顺序交给 Nukkit 单主线程 FIFO;关闭路径保留旧三队列处理。

旧新对比

边界 原实现 当前实现
消费阶段 异步解包 + 主线程周期Ticker 原异步解包 + 正常/空闲主线程FIFO;没有第二世界线程
开关 原队列与raw移动开关 本地main-thread-input且核心dispatcher存在才启用,任一关闭走旧入口;新模式抑制raw验前广播
包时钟 处理时刻容易混同到达 Synapse解帧入口receivedNanos,原批次子包同时间;再记录入队与执行阶段,缺接入值时用入队时间,不伪造间隔
登录首批 Player公开后可被异步解码 登录主线程任务完成后才发布新模式解码接收者;首批原包在自己的队列位置解包,不把子包追加队尾
验证 Nya原包事件入口 原监听全部结束后通过PlayerInputProcessor执行原验证一次;取消不能被接受结果重新放行
动作 原版本虚拟handler 复用完整继承链/事件/子动作;AuthInput内嵌动作等本帧最终移动提交后执行,不拆分抢跑
生命周期 UUID/session及原队列 原Player、Session、Channel、世界/位置代际与原操作来源复检;替换TCP、转服、退出后旧任务失效
普通NSL测延迟 原编号/统计 每玩家一个未完成PendingPing,匹配本地签发请求才计时;不把快速回复丢掉,不在回复中递归发请求

准入不是全包立即执行

BetweenTickPackets 静态检查完整包布局、附加位、库存动作及内嵌动作,主线程消费时再检查当前服务端状态。已准入包括合法移动/确认、选槽/装备回声、挥手、已审计的攻击/空中使用/释放/消耗事务、限定JE扩展等;不是每种协议/子动作一律准入。

普通容器/合成/附魔/修理、未闭环的复杂姿态与移动使用组合仍是队头屏障,回到下一正常输入阶段处理。吃东西/蓄力不会补世界 tick;合法释放/切槽不能被自己的使用状态永远锁住。有效屏障也会阻止后面的其他玩家,不能动作优先或跳过FIFO来“提速”。

必须人工检查的具体交叉点

  • SynapseEntry 的三队列与新FIFO互斥、批次/登录顺序、offer失败后的来源关闭。
  • SynapsePlayer各版本继承链中的取消、状态重入、内嵌动作和本帧提交;Java RPC/文本/地图/NPC回调保持原顺序。
  • 物品来自服务端验证后的原槽;客户端item/tick/flags只做输入校验,不提供可信运动/物理或免检资格。
  • 新模式raw关闭但普通viewers和发布链保留;实际SharedFlag/metadata、motion、NSL及丢弃身份完整交接。
  • 混合Nukkit:目标新Player绑定目标Entry的启动模式,不从转服数据继承来源模式;同一配套构建可部分开启,不能宣称任意新旧JAR混搭。

生产24文件 +1618/-256;测试43文件 +5777/-9。原协议维护/统计不按输入频率推进,不改变伤害期限或原战斗数值。

验证与限制

最近一次完整Synapse回归353项通过(含四组核心/Synapse组合、Entry/Player隔离);rebase时351项与shadowJar通过。15组容器渲染及原Nukkit读取器检查、测试镜像/实际启动双键回读已通过。现场BE3.9/正版JE基础功能及用户手感反馈不替代完整混合转服、旧ACK、持续使用队头等待和UX统计。

跨仓库接入与审查边界

这是 Möbius #856「低延迟输入框架与 PvP 全链路优化」的配套审查 PR。完整架构、时序和版本矩阵由 CodeFunCore 主 PR #657 汇总。各仓库 PR 是同一兼容构建集合,不能将单个子模块任意配旧版本上线。保留服务端原验证与 FIFO,客户端 tick-end/运动/飞行 flag 均不是可信物理时钟,不构造免检窗口或调大检测容差。

测试服已经使用配套镜像,用户反馈基本游玩可用、手感明显改善;这不替代完整包序、物理安全、混合转服、PvP 技巧与画面统计验收。PR 使用 Draft 暴露待审问题,创建 PR 不代表准许合并或正式发布。

审查冻结:master ee796af515dc664650bbae29bfdd15d598416295 → codex/je-input-runtime 2b543ab3969f33bfc23e7b1c3d57cc55731d160b。净差异:67 files changed, 7395 insertions(+), 265 deletions(-)。

真实JE首批96字节按错误网易布局解码导致断线已复现。新模式复用原缺少Player的FIFO延后分支,私有表在同步登录返回后登记;原Server登记/事件/旧模式不改,closed对象不再登记。原入口前后回归、351项Synapse/20项调度检查及JE/BE登录等待和专用确认复测通过,无新增就绪状态/线程/队列或Nya算法变更。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant