SlideShare a Scribd company logo
1 of 13
Download to read offline
通信プロトコルから見る
艦隊これくしょん
藤枝 和宏 @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

More Related Content

What's hot

PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界Yoshihiro Ohsuka
 
cucumber-jvmで受け入れテスト
cucumber-jvmで受け入れテストcucumber-jvmで受け入れテスト
cucumber-jvmで受け入れテストTakafumi Yoshida
 
Couchbase hackaton pomo
Couchbase hackaton pomoCouchbase hackaton pomo
Couchbase hackaton pomoTaro Matsuzawa
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。Teppei Sato
 
テンプレートエンジンの話 #jjug
テンプレートエンジンの話 #jjugテンプレートエンジンの話 #jjug
テンプレートエンジンの話 #jjugYusuke Yamamoto
 
WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加するWeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する裕士 常田
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#将 高野
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作terurou
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テストYamamoto Kazuhisa
 
KLab Server Side Camp
KLab Server Side CampKLab Server Side Camp
KLab Server Side Campssuser7a9c19
 
誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方666oh666
 
わんくま東京#46 予告編
わんくま東京#46 予告編わんくま東京#46 予告編
わんくま東京#46 予告編Sunao Tomita
 
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳するMarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳するYukihiko SAWANOBORI
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編Kazuya Numata
 
Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)泰 増田
 
AWSを使いこなすポイント(仮)
AWSを使いこなすポイント(仮)AWSを使いこなすポイント(仮)
AWSを使いこなすポイント(仮)Suguru Shirai
 

What's hot (20)

PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界PHPという概念が存在しない退屈な世界
PHPという概念が存在しない退屈な世界
 
cucumber-jvmで受け入れテスト
cucumber-jvmで受け入れテストcucumber-jvmで受け入れテスト
cucumber-jvmで受け入れテスト
 
Couchbase hackaton pomo
Couchbase hackaton pomoCouchbase hackaton pomo
Couchbase hackaton pomo
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。
 
テンプレートエンジンの話 #jjug
テンプレートエンジンの話 #jjugテンプレートエンジンの話 #jjug
テンプレートエンジンの話 #jjug
 
WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加するWeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テスト
 
KLab Server Side Camp
KLab Server Side CampKLab Server Side Camp
KLab Server Side Camp
 
誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方
 
わんくま東京#46 予告編
わんくま東京#46 予告編わんくま東京#46 予告編
わんくま東京#46 予告編
 
CDP in NAGOYA
CDP in NAGOYACDP in NAGOYA
CDP in NAGOYA
 
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳するMarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
 
130207 kyotorb
130207 kyotorb130207 kyotorb
130207 kyotorb
 
cdp-night-01
cdp-night-01cdp-night-01
cdp-night-01
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
 
Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)Robot Framework (のSelenium2Libraryのお話)
Robot Framework (のSelenium2Libraryのお話)
 
AWSを使いこなすポイント(仮)
AWSを使いこなすポイント(仮)AWSを使いこなすポイント(仮)
AWSを使いこなすポイント(仮)
 

Viewers also liked

角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみるHiro H.
 
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!Hiro H.
 
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊Kazuhiro Fujieda
 
アルゴリズムのお勉強 マージソート 試験対策
アルゴリズムのお勉強 マージソート 試験対策アルゴリズムのお勉強 マージソート 試験対策
アルゴリズムのお勉強 マージソート 試験対策hixi365
 
アルゴリズムのお勉強 ダイクストラ
アルゴリズムのお勉強 ダイクストラアルゴリズムのお勉強 ダイクストラ
アルゴリズムのお勉強 ダイクストラhixi365
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】Hiro H.
 
超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjs超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjsK Kinzal
 
iPhoneのBluetoothについての知見まとめ
iPhoneのBluetoothについての知見まとめiPhoneのBluetoothについての知見まとめ
iPhoneのBluetoothについての知見まとめShuichi Tsutsumi
 
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗Hiro H.
 
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]hixi365
 
Why roommates matter
Why roommates matterWhy roommates matter
Why roommates matterdrmstucker
 
Java 8 - Stamped Lock
Java 8 - Stamped LockJava 8 - Stamped Lock
Java 8 - Stamped LockHaim Yadid
 
Testimonial for the High Performance Organisation (HPO) Workshop for Generali...
Testimonial for the High Performance Organisation (HPO) Workshop for Generali...Testimonial for the High Performance Organisation (HPO) Workshop for Generali...
Testimonial for the High Performance Organisation (HPO) Workshop for Generali...Centre for Executive Education
 
ADAPTATION OF MANGROVES
ADAPTATION OF MANGROVESADAPTATION OF MANGROVES
ADAPTATION OF MANGROVESAbhijit Mitra
 
paesi e nazionalità by elenab
paesi e nazionalità by elenabpaesi e nazionalità by elenab
paesi e nazionalità by elenabelenab76
 

Viewers also liked (18)

Kancolle
KancolleKancolle
Kancolle
 
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
 
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
 
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
 
アルゴリズムのお勉強 マージソート 試験対策
アルゴリズムのお勉強 マージソート 試験対策アルゴリズムのお勉強 マージソート 試験対策
アルゴリズムのお勉強 マージソート 試験対策
 
アルゴリズムのお勉強 ダイクストラ
アルゴリズムのお勉強 ダイクストラアルゴリズムのお勉強 ダイクストラ
アルゴリズムのお勉強 ダイクストラ
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
 
超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjs超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjs
 
iPhoneのBluetoothについての知見まとめ
iPhoneのBluetoothについての知見まとめiPhoneのBluetoothについての知見まとめ
iPhoneのBluetoothについての知見まとめ
 
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
 
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
 
Why roommates matter
Why roommates matterWhy roommates matter
Why roommates matter
 
Java 8 - Stamped Lock
Java 8 - Stamped LockJava 8 - Stamped Lock
Java 8 - Stamped Lock
 
Kettlebell esercizio military press
Kettlebell esercizio military pressKettlebell esercizio military press
Kettlebell esercizio military press
 
Testimonial for the High Performance Organisation (HPO) Workshop for Generali...
Testimonial for the High Performance Organisation (HPO) Workshop for Generali...Testimonial for the High Performance Organisation (HPO) Workshop for Generali...
Testimonial for the High Performance Organisation (HPO) Workshop for Generali...
 
ADAPTATION OF MANGROVES
ADAPTATION OF MANGROVESADAPTATION OF MANGROVES
ADAPTATION OF MANGROVES
 
Talentdotgo
TalentdotgoTalentdotgo
Talentdotgo
 
paesi e nazionalità by elenab
paesi e nazionalità by elenabpaesi e nazionalità by elenab
paesi e nazionalità by elenab
 

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