【要約】Pyxelで4人リアルタイム対戦を作る — サーバーレスhost migrationの沼にハマった話 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がサーバーレスでの4人対戦を実現しようとした際、ホスト脱退時の接続維持において深刻な問題に直面した。
- ・PeerJSのconnect()がタイムアウトせず、接続待ちで永久に固まる。
- ・unavailable-id以外のネットワークエラー発生時に、状態機械が停止する。
- ・不適切なタイムアウト値により、接続成立前に切断されるループが発生する。
- ・無料シグナリングサーバーのレート制限(429エラー)に抵触する。
// Approach
開発者は、ライブラリの不完全なエラー通知やネットワーク遅延を補完するため、自前での監視と再試行制御を導入した。
- ・自前Watchdogタイマーを実装し、接続の成否を強制的に判定する。
- ・タイムアウト値を実機のネットワーク事情に合わせ2〜4秒へ緩和する。
- ・Exponential Backoffを導入し、再試行間隔を指数関数的に増大させる。
- ・エラーハンドリングの対称性を確保し、全非同期処理にガードを設ける。
// Result
開発者は、サーバーレス構成のまま、ホスト脱退時に数秒以内でゲームを継続できる仕組みを構築した。
- ・接続の「固まり」を解消し、ホストの再選挙プロセスを安定化させた。
- ・接続試行回数を制御し、無料インフラのレート制限を回避した。
- ・実機環境における、NAT越えを考慮した接続成功率を向上させた。
Senior Engineer Insight
> P2P通信における「エラーが出ずに固まる」事象への対策は、分散システム設計の基本である。ライブラリの抽象化を過信せず、タイムアウトと再試行戦略を自前で制御する重要性が示されている。ただし、無料インフラへの依存は商用環境では致命的であり、TURNサーバーの導入やシグナリングサーバーの自前運用が実戦投入の条件となる。