More Related Content
Similar to ポコロンダンジョンズとリアルタイム通信 -クライアント編- (8)
ポコロンダンジョンズとリアルタイム通信 -クライアント編-
- 2. 自己紹介
• 袴田 大貴 (Hakamata Daiki)
• 株式会社グレンジ所属
• ポコロンダンジョンズ クライアントエンジニア
• リリース前から現在まで
https://www.facebook.com/D.hakamata
- 6. アジェンダ
1. 構成
2. 同期方法
3. 具体例
4. 確率で発生する事象
5. 待ち合わせ
6. 再接続と強制同期
7. まとめ
- 9. リアルタイム通信
n プロトコル
WebSocket : ブラウザでは定番
UDP : MMOでよく使われる
RUDP : UDPとTCPの良いとこどり
HTTP : ポーリング
n ミドルウェア
Node.js : すべての処理を自前で実装, JavaScript
Photon : クラウドあり, C#, WIndowsServer
モノビットエンジン : クラウドあり, C++, LinuxServer
- 14. ソケット通信Libの改修
n iOS
host, port, pathによる接続先設定
SSL対応
切断/再接続処理
n Android
SSL対応
SSLContextのプロトコル複数対応
切断処理 (GC多発)
JNI/マルチスレッド対応
イベント名+JSONデータ送受信
- 18. 端末間の同期
• 盤面の色, 配置
• 敵の情報
• プレイヤー, 召喚モンスターの情報
• 被ダメ/与ダメ
• ターン数
• ドロップ情報
全てをやり取りするとデータ量多い!
- 19. 端末間の同期
• ポコダン は ターン制
→ 他プレイヤーの操作を自端末で再現すればデータ量削減
(2, 4), (2, 5), (3, 6)
をなぞった
再現します
- 25. クエスト中 (送信)
n ターンの操作権限者が送る情報
• プレイヤ番号
• 行動タイプ (なぞり/スキル/リタイア/コンティニュー)
• コマンドインデックス (送信情報のシーケンシャル番号)
• (なぞり情報)
• (使用したスキル情報)
- 26. プレイヤー : 2
コマンド : 0
タイプ : なぞり始め
なぞり : (1, 4)
プレイヤー : 2
コマンド : 1
タイプ : なぞり中
なぞり : (2, 4)
・・・
プレイヤー : 2
コマンド : 5
タイプ : なぞり終わり
- 27. クエスト中 (受信)
n なぞり始め
盤面を暗転
n なぞり中
なぞり情報を元に光るラインを再現
n なぞり終わり
なぞりルートを確定
「送信者側の端末で起きた事象を自身の端末で再現」
- 29. 乱数(擬似乱数)
乱数生成器
シード値 : A
乱数列
x1, x2, x3, x4, x5, …
乱数生成器
シード値 : B
乱数列
y1, y2, y3, y4, y5, …
同一のシード値で初期化すれば、同一の乱数列が得られる
- 33. OSとSTL
n iOS
libc++ (LLVM C++ standard library)
n Android
APP_STL := gnustl_static [Application.mk]
C++標準ライブラリが異なるので、そのままではシード値
を同期しても生成される乱数列が異なる
- 43. 再接続
1. 偶発的切断発生
2. 一定時間、再接続を試みる
3. 再接続に成功したら、クエスト復帰
キャリア回線とWi-Fiの切り替わりなど瞬断は起こりうる
「通信は切れるもの」として対策をする