13
通通通通通通通通通通通 通通通通通通通通 通通 通通 @kfujieda ftp.jaist.ac.jp 通通通通 2014/5/25 通通通 通通通通VM 通通通 1

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

通信プロトコルから見る艦隊これくしょん

藤枝 和宏 @kfujiedaftp.jaist.ac.jp の中の人

2014/5/25 第十回 カーネル/ VM探検隊 1

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

艦隊これくしょん• Adobe Flash で動作するブラウザゲーム• 操作のレスポンスが非常に悪かった

2014/5/25 第十回 カーネル/ VM探検隊 2

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

レスポンスが悪い理由• 通信プロトコル (REST API) に無駄が多かった• リクエスト数が無駄に多い• レスポンスの JSON が無駄に大きい

• JSON のデコードが遅かった• as3corelib の JSON デコーダーが使われていた(たぶ

ん)• ActionScript で書かれていて遅い

2014/5/25 第十回 カーネル/ VM探検隊 3

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

4 月 23 日に全面改良• 春イベント「索敵機、発艦始め!」の開始日• イベント期間中は DAU が大きく増える• 過去のイベントでは通信エラーが頻発

• イベントに合わせて大幅改良• 通信プロトコルの改良• クライアントの改良

• Flash 11 のネイティブ JSON デコーダーを使用(たぶん)

2014/5/25 第十回 カーネル/ VM探検隊 4

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

支援ツールの開発者が死亡

2014/5/25 第十回 カーネル/ VM探検隊 5

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

KancolleSnifferkancollesniffer.sourceforge.jp

• 艦これの支援ツール• 情報の一覧表示• 自動式タイマー

• 遠征、入渠、建造など

• 通信をキャプチャして実現• Windows のシステムプロ

キシを乗っ取る

2014/5/25 第十回 カーネル/ VM探検隊 6

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

ログイン(旧)• スタート画面から母港

まで 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

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

ログイン(旧)の問題• /api_get_master/ship 561kB• 艦娘と深海戦艦全部の仕様• 55 プロパティのオブジェクトが約 400• 遅い CPU ではデコードが間に合わない

「ムービー内のスクリプトが原因で実行速度が遅くなっています。」

• /api_get_member/slotitem 183kB• 保有装備の情報• 名前を含む装備の仕様が入っている

• 12.7cm 連装砲が 20 個あれば” 12.7cm 連装砲”が 20 個

2014/5/25 第十回 カーネル/ VM探検隊 8

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

ログイン(新)• スタート画面から母

港まで 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

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

• 旧クライアント

• 新クライアント

解体

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 解体指示

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

補給• 旧クライアント

• 新クライアント

2014/5/25 第十回 カーネル/ VM探検隊 11

/api_req_hokyu/charge 0kB 補給指示/api_get_member/ship2 57kB 全艦娘の状態

/api_req_hokyu/charge 0kB 補給指示

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

母港• 旧実装

• 新実装

• 毎回全艦娘の状態を取得するのは同じ

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 全部まとめて

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

支援ツールへの影響• 操作後に現状確認するリクエストが出ない• 情報を取得する機会が激減• KancolleSniffer はリクエストのパラメータを基に計

算• 解体→艦娘数 -1 、装備数 -n

• 母港に戻ると現状確認するのは同じ• 母港に戻ったときに情報更新すればよい

2014/5/25 第十回 カーネル/ VM探検隊 13