通常マルチプレイヤーの共有 relay とスコア同期を安定にする #3
Loading…
Reference in a new issue
No description provided.
Delete branch "superories/normal-multiplayer-score-sync"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
この PR は、先に閉じた通常 multiplayer の multi-node と local relay 変更を含めた、まとめた version です。ranked match は入れていません。
今回の main point は score sync です。network delay や jitter がある時、古い judgement packet が次の circle に入って、二人の score、combo、result が少し違うことがありました。通常 note、Miss、大音符、drumroll と balloon packet に circleIndex と現在の score state を入れて、受信側は relay sequence と circleIndex で古い packet を捨て、対応する note だけに適用します。score state は remote player の表示と result にも使います。
relay には syncping/syncpong、millisecond server_time、peer ごとの monotonic seq、duplicate gamestart の idempotent handling を追加しました。既存の five-character invite、/p2、普通の invite protocol と古い note payload はそのまま使えます。taikoapp.uk は shared relay を複数選べて、local multiplayer server も normal node として登録できます。
LAN では二つの browser client で、node invite、normal note、Miss、大音符、drumroll、balloon、branch、result、disconnect 後の次 round、second node と legacy five-character invite を確認しました。遅延を 80–1200 ms の間で変えても、双方が見る相手の points/good/ok/bad/maxCombo/drumroll/gauge/combo と result は一致しました。Node test 14/14、Python relay/node test 11/11、JavaScript syntax、Python compile、diff check も通っています。
Pull request closed