More Related Content
Similar to ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
Similar to ポコロンダンジョンズとリアルタイム通信 -サーバサイド編- (20)
ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
- 8. • Nginx(1.4.4)
• Node.js(v0.10.32)
• Socket.IO(0.9.17)
クライアントのライブラリに合わせて0.9.17を選択。
接続時にハンドシェイクが遅延した場合に一定期間
ハンドシェイクを待つパッチを当てて利用している
。
https://github.com/tico8/socket.io/tree/0.9.16-patched
• Redis(2.8.4)
利用技術-リアルタイム通信部分-
- 12. • BIG-IP製
• SSL対応
• ラウンドロビン+IP persistence設定
- 同じIPアドレスは、同じnodeサーバへ
- persistenceのキャッシュ削除間隔を1秒程度
- マスクは255.255.255.255
最近まで255.0.0.0になってて偏りが・・・
• sticky sessionを利用
Socket.IOのコネクション確立通信(2発目)を同サー
バに振るため
サーバ構成-ロードバランサ-
- 17. ‣ Nginx
• 80番ポートで受け
• 3000番ポートでNode.jsに流し込む
• リバースプロキシでサブドメインを割り当てた
Node.jsに振る
‣ Node.js
• 1マスタープロセス、1ワーカプロセス
※ワーカプロセスがCluster構成にできなかった
• foreverを利用しプロセス永続化
サーバ構成-Webサーバ-
- 18. server {
listen 80;
server_name localhost;
index index.php index.html index.htm;
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
underscores_in_headers on;
location ^~ /pocolon_dungeons_node/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location ^~ /pocolon_dungeons_node/socket.io/ {
…
}
/etc/nginx/conf.d/pocolon_dungeons_node.conf
サーバ構成-Webサーバ-
- 27. ‣ PHP側
• ルームIDなどを受け取り
• Redisデータ更新
メンバー情報に自身を追加
※ソケット未接続ステータス
• ルーム内のユーザのデッキ情報など表示用データを
返す
‣ Node.js側
• ユーザID、ルームIDなどを受け取り
• Redisデータ更新
ソケット接続済みステータスに更新
• 更新情報など表示に使うデータを全メンバーへ通知
機能-ルーム参加-
Editor's Notes
- ・同じ色のパズルブロック「ポコロン」をなぞってモンスターを攻撃
・ダンジョンで入手した素材を合成して、武器・防具を作ったり
・モンスターを強化・進化させたり
・マルチプレイは最大4人
・シングル・マルチともにターン制
- 22日に3.7.0アップデート
- Redis
・キャッシュ用(非リアルタイム通信)
・データ用(リアルタイム通信)
データ用はNode.js側と共有している
- ・Socket.IOの0.9.16はメモリリーク問題があったが0.9.17で解消されている。
・Redis
・Pub/Sub用(リアルタイム通信)
・データ用(リアルタイム通信)
データ用はPHP側と共有している
- ピュアにライブラリを利用せず、独自でPub/Subを実装しているため、色々と問題があった。
- 各設定を軽く説明していく
- socket.ioも同じ設定
- 各ライブラリのバージョン
- これら以外にもキーはあるがメインはこの4つ。
・プレイヤーとルームの紐付け用のキーがあるsocket切断で残ってしまったルームを削除するため
・同イベントの複数送信対策など
- Redisのキーに関しては後ほど説明