通信プロトコルから見る
艦隊これくしょん
藤枝 和宏 @kfujieda
ftp.jaist.ac.jpの中の人
2014/5/25 第十回 カーネル/VM探検隊 1
艦隊これくしょん
• Adobe Flashで動作するブラウザゲーム
• 操作のレスポンスが非常に悪かった
2014/5/25 第十回 カーネル/VM探検隊 2
レスポンスが悪い理由
• 通信プロトコル(REST API)に無駄が多かった
• リクエスト数が無駄に多い
• レスポンスのJSONが無駄に大きい
• JSONのデコードが遅かった
• as3corelibのJSONデコーダーが使われていた(たぶん)
• ActionScriptで書かれていて遅い
2014/5/25 第十回 カーネル/VM探検隊 3
4月23日に全面改良
• 春イベント「索敵機、発艦始め!」の開始日
• イベント期間中はDAUが大きく増える
• 過去のイベントでは通信エラーが頻発
• イベントに合わせて大幅改良
• 通信プロトコルの改良
• クライアントの改良
• Flash 11のネイティブJSONデコーダーを使用(たぶん)
2014/5/25 第十回 カーネル/VM探検隊 4
支援ツールの開発者が死亡
2014/5/25 第十回 カーネル/VM探検隊 5
KancolleSniffer
kancollesniffer.sourceforge.jp
• 艦これの支援ツール
• 情報の一覧表示
• 自動式タイマー
• 遠征、入渠、建造など
• 通信をキャプチャして実現
• Windowsのシステムプロキ
シを乗っ取る
2014/5/25 第十回 カーネル/VM探検隊 6
ログイン(旧)
• スタート画面から母港ま
で17リクエスト
• マスターデータのリクエ
スト数が多い
• まとめるとJSONのデ
コードが間に合わな
いからか
2014/5/25 第十回 カーネル/VM探検隊 7
S1 /sound/titlecall/b/01.mp3 20kB
/api_get_member/basic 1kB
/api_get_master/ship 561kB
/api_get_master/stype 2kB
/api_get_member/ship 108kB
/api_get_member/deck 1kB
/api_get_member/material 0kB
/api_get_member/kdock 1kB
/api_get_master/furniture 82kB
/api_get_member/furniture 7kB
/api_get_master/slotitem 91kB
S2 /sound/titlecall/c/06.mp3 36kB
/api_get_member/slotitem 183kB
/api_start 259kB
/api_get_master/useitem 9kB
/api_get_member/useitem 1kB
/api_get_master/maparea 1kB
S3 /sound/kc403/1.mp3 46kB
合計(mp3以外) 1.34MB
ログイン(旧)の問題
• /api_get_master/ship 561kB
• 艦娘と深海戦艦全部の仕様
• 55プロパティのオブジェクトが約400
• 遅いCPUではデコードが間に合わない
「ムービー内のスクリプトが原因で実行速度が遅くなっています。」
• /api_get_member/slotitem 183kB
• 保有装備の情報
• 名前を含む装備の仕様が入っている
• 12.7cm連装砲が20個あれば”12.7cm連装砲”が20個
2014/5/25 第十回 カーネル/VM探検隊 8
ログイン(新)
• スタート画面から母港
まで9リクエスト
• マスターデータの取得
を集約
• slot_itemの縮小
2014/5/25 第十回 カーネル/VM探検隊 9
S1 /sound/titlecall/b/08.mp3 56kB
/api_start2 1,069kB
/api_req_member/get_in… 0kB
/api_get_member/basic 1kB
/api_get_member/furniture 11kB
/api_get_member/slot_item 21kB
/api_get_member/useitem 1kB
/api_get_member/kdock 1kB
/api_get_member/unsetslot 2kB
S2 /sound/titlecall/c/08.mp3 35kB
/api_port/port 69kB
S3 /sound/kcfggcskrfkpnr/1.mp3 65kB
計(mp3以外) 1.18MB
• 旧クライアント
• 新クライアント
解体
2014/5/25 第十回 カーネル/VM探検隊 10
/api_req_kousyou/destroyship 0kB 解体指示
/api_get_member/material 0kB 資材数
/api_get_member/ship2 57kB 全艦娘の状態
/api_get_member/slotitem 183kB 保有装備
/api_req_kousyou/destroyship 0kB 解体指示
補給
• 旧クライアント
• 新クライアント
2014/5/25 第十回 カーネル/VM探検隊 11
/api_req_hokyu/charge 0kB 補給指示
/api_get_member/ship2 57kB 全艦娘の状態
/api_req_hokyu/charge 0kB 補給指示
母港
• 旧実装
• 新実装
• 毎回全艦娘の状態を取得するのは同じ
2014/5/25 第十回 カーネル/VM探検隊 12
/api_get_member/material 0kB 資材数
/api_get_member/deck_port 1kB 艦隊編成
/api_get_member/ndock 1kB 入渠情報
/api_get_member/ship3 54kB 全艦娘の状態
/api_get_member/basic 1kB 提督の情報
/api_port/port 63kB 全部まとめて
支援ツールへの影響
• 操作後に現状確認するリクエストが出ない
• 情報を取得する機会が激減
• KancolleSnifferはリクエストのパラメータを基に計算
• 解体→艦娘数-1、装備数-n
• 母港に戻ると現状確認するのは同じ
• 母港に戻ったときに情報更新すればよい
2014/5/25 第十回 カーネル/VM探検隊 13
Ad

通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊