Upload
kazuhiro-fujieda
View
9.191
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
通信プロトコルから見る艦隊これくしょん
藤枝 和宏 @kfujiedaftp.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
KancolleSnifferkancollesniffer.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