通信プロトコルから見る
艦隊これくしょん
藤枝 和宏 @kfujieda
ftp.jaist.ac.jpの中の人
2014/5/25 第十回 カーネル/VM探検隊 1
艦隊これくしょん
• Adobe Flashで動作するブラウザゲーム
• 操作のレスポンスが非常に悪かった
2014/5/25 第十回 カーネル/VM探検隊 2
レスポンスが悪い理由
• 通信プロトコル(REST API)に無駄が多かった
• リクエスト数が無駄に多い
• レスポンスのJSONが無駄に大きい
• JSONのデコードが遅かった
• as3corelibのJSONデコーダーが使われていた(た...
4月23日に全面改良
• 春イベント「索敵機、発艦始め!」の開始日
• イベント期間中はDAUが大きく増える
• 過去のイベントでは通信エラーが頻発
• イベントに合わせて大幅改良
• 通信プロトコルの改良
• クライアントの改良
• Flas...
支援ツールの開発者が死亡
2014/5/25 第十回 カーネル/VM探検隊 5
KancolleSniffer
kancollesniffer.sourceforge.jp
• 艦これの支援ツール
• 情報の一覧表示
• 自動式タイマー
• 遠征、入渠、建造など
• 通信をキャプチャして実現
• Windowsのシステムプ...
ログイン(旧)
• スタート画面から母港ま
で17リクエスト
• マスターデータのリクエ
スト数が多い
• まとめるとJSONのデ
コードが間に合わな
いからか
2014/5/25 第十回 カーネル/VM探検隊 7
S1 /sound/titl...
ログイン(旧)の問題
• /api_get_master/ship 561kB
• 艦娘と深海戦艦全部の仕様
• 55プロパティのオブジェクトが約400
• 遅いCPUではデコードが間に合わない
「ムービー内のスクリプトが原因で実行速度が遅くな...
ログイン(新)
• スタート画面から母港
まで9リクエスト
• マスターデータの取得
を集約
• slot_itemの縮小
2014/5/25 第十回 カーネル/VM探検隊 9
S1 /sound/titlecall/b/08.mp3 56kB...
• 旧クライアント
• 新クライアント
解体
2014/5/25 第十回 カーネル/VM探検隊 10
/api_req_kousyou/destroyship 0kB 解体指示
/api_get_member/material 0kB 資材数
...
補給
• 旧クライアント
• 新クライアント
2014/5/25 第十回 カーネル/VM探検隊 11
/api_req_hokyu/charge 0kB 補給指示
/api_get_member/ship2 57kB 全艦娘の状態
/api_r...
母港
• 旧実装
• 新実装
• 毎回全艦娘の状態を取得するのは同じ
2014/5/25 第十回 カーネル/VM探検隊 12
/api_get_member/material 0kB 資材数
/api_get_member/deck_port ...
支援ツールへの影響
• 操作後に現状確認するリクエストが出ない
• 情報を取得する機会が激減
• KancolleSnifferはリクエストのパラメータを基に計算
• 解体→艦娘数-1、装備数-n
• 母港に戻ると現状確認するのは同じ
• 母港...
Upcoming SlideShare
Loading in...5
×

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

10,741

Published on

0 Comments
29 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
10,741
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
20
Comments
0
Likes
29
Embeds 0
No embeds

No notes for slide

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

  1. 1. 通信プロトコルから見る 艦隊これくしょん 藤枝 和宏 @kfujieda ftp.jaist.ac.jpの中の人 2014/5/25 第十回 カーネル/VM探検隊 1
  2. 2. 艦隊これくしょん • Adobe Flashで動作するブラウザゲーム • 操作のレスポンスが非常に悪かった 2014/5/25 第十回 カーネル/VM探検隊 2
  3. 3. レスポンスが悪い理由 • 通信プロトコル(REST API)に無駄が多かった • リクエスト数が無駄に多い • レスポンスのJSONが無駄に大きい • JSONのデコードが遅かった • as3corelibのJSONデコーダーが使われていた(たぶん) • ActionScriptで書かれていて遅い 2014/5/25 第十回 カーネル/VM探検隊 3
  4. 4. 4月23日に全面改良 • 春イベント「索敵機、発艦始め!」の開始日 • イベント期間中はDAUが大きく増える • 過去のイベントでは通信エラーが頻発 • イベントに合わせて大幅改良 • 通信プロトコルの改良 • クライアントの改良 • Flash 11のネイティブJSONデコーダーを使用(たぶん) 2014/5/25 第十回 カーネル/VM探検隊 4
  5. 5. 支援ツールの開発者が死亡 2014/5/25 第十回 カーネル/VM探検隊 5
  6. 6. KancolleSniffer kancollesniffer.sourceforge.jp • 艦これの支援ツール • 情報の一覧表示 • 自動式タイマー • 遠征、入渠、建造など • 通信をキャプチャして実現 • Windowsのシステムプロキ シを乗っ取る 2014/5/25 第十回 カーネル/VM探検隊 6
  7. 7. ログイン(旧) • スタート画面から母港ま で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
  8. 8. ログイン(旧)の問題 • /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. 9. ログイン(新) • スタート画面から母港 まで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
  10. 10. • 旧クライアント • 新クライアント 解体 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 解体指示
  11. 11. 補給 • 旧クライアント • 新クライアント 2014/5/25 第十回 カーネル/VM探検隊 11 /api_req_hokyu/charge 0kB 補給指示 /api_get_member/ship2 57kB 全艦娘の状態 /api_req_hokyu/charge 0kB 補給指示
  12. 12. 母港 • 旧実装 • 新実装 • 毎回全艦娘の状態を取得するのは同じ 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 全部まとめて
  13. 13. 支援ツールへの影響 • 操作後に現状確認するリクエストが出ない • 情報を取得する機会が激減 • KancolleSnifferはリクエストのパラメータを基に計算 • 解体→艦娘数-1、装備数-n • 母港に戻ると現状確認するのは同じ • 母港に戻ったときに情報更新すればよい 2014/5/25 第十回 カーネル/VM探検隊 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×