Submit Search
Smart fxでのsocketio活用事例
•
Download as PPTX, PDF
•
3 likes
•
2,637 views
剛志 森田
Follow
SmartFXでのsocket.io活用事例
Read less
Read more
1 of 20
Download now
Download to read offline
More Related Content
Smart fxでのsocketio活用事例
1.
SmartFXでの Socket.IO活用事 例 株式会社みんかぶ 森田剛志 @takeshy
2.
アジェンダ SmartFXについて Socket.IOを使った実装 Socket.IOの実装で考慮したこと Socket.IO-ReqEvについて Socket.IOサーバの運用
冗長化と負荷分散 デプロイ時における停止
3.
SmartFXについて
4.
どんなサイト? みんかぶが提供するスマホ向け無料FX情 報サイト。ニュース、チャート、予想が 見れたり、バーチャルトレードができま す。 Socket.IOとBackbone.jsを使ってリアル タイムなSinglePageApplicationを構築し ています。 http://smartfx.jp (正式にはhttp://smartfx.minkabu.jp)
5.
Socket.IOを使った実装
6.
Socket.IOの実装で考慮 したこと Socket.IOはSocketを制御するため のNameSpace、Rooms、Events という便利な機能があります。 ただ、これらの機能は各々が代替 できるので方針を決めて使わない と、まちまちになってしまいます。 そこでSmartFXはルールを決めま した
7.
SmartFXにおける NameSpace,Rooms,Eventsの ルール NameSpaceとオブジェクトは1対1の関 係で作成する Roomはイベント毎に作成する
イベントが発生した場合はRoomを使って 送信する Eventは”message”,”reply”,”error”の3 つ “message”はクライアントからサーバ に”reply”,”error”はサーバからクライアント
8.
Socket.IO-ReqEv これらの約束を適用することで Socket.IO関連の処理が共通化され たので、くくりだしMiddlewareに することができました そのMiddlewareがSocket.IO-ReqEv です
インストールは下記のコマンドです npm install socket.io-reqev
9.
Socket.IO-ReqEvの使い 方 サーバー側 Socket.IO-ReqEvを使う2つのSTEP 1. Socket.IOオブジェクトを初期値として渡して IOReqEvオブジェクトを生成 2.
IOReqEvオブジェクトにパラメータとして、 NameSpaceと規約にのっとったオブジェクトを 渡します。 この例ではひとつだけの登録ですが、ペアを何個も登録可能。
10.
Socke.IO-ReqEvに渡すオブジェク トの規約は下記の3つです。 1. eventsというArrayのプロパティ にクライアントに送るイベント名 を登録する。 2. EventEmitterを継承して、イベ ントが発生した場合はデータと共 にイベントをemitする 3.
クライアントからのメッセージ にrequestsというパラメータが含 まれていた場合に呼び出されるメ ソッドrequestを実装する。(Like HTTP GET) 左記のサンプルは1秒および1分ご とのイベントと現在時間を返すた めのプログラムです。
11.
Socket.IO-ReqEvの使い 方 クライアント側 Socket.IO-Reqevをブラウザで使う2つの STEP 1. Socket.IOサーバアドレス+Path(NameSpace)と、 callbackを渡してIOReqEvClientを作ります。 2.
watchメソッドでsubscribeしたいイベントとリクエス トの種別を指定します。 eventsに違うイベントを指定して再度watchを実行すると、サーバ側 でもう必要なくなったイベントのunsubscribe処理が行われます
12.
Socket.IO-ReqEvの実 装 サーバ側は60行もないソース Socket.IO
0.9.xの頃は非公開の属性 を使っていましたが、1.0になって公 開されている属性のみになりました 興味がある人は読んで https://github.com/takeshy/socket.io- reqev
13.
Socket.IOサーバの運用
14.
システム構成
15.
冗長化と負荷分散 冗長化と負荷分散は、Socket.IOサーバ がDBに登録された自分の情報を定期的 更新し、Webサーバが最近更新された Socket.IOサーバのアドレス一覧からラ ンダムにアドレスを選んでそのアドレ スをクライアントに伝えることで実現 しています。
16.
冗長化と負荷分散 シーケンス
17.
デプロイ時における停止 pm2というNode.jsのプログラムの デーモン管理ツールを使っています が、Shutdownしようとdeleteコマン ドを実行しても、 Socket.IOのよう なネットワークコネクションがは りっぱなしの場合、いつまでも deleteコマンドが完了しません。
そのため、Socket.IOサーバ自身が Shutdownする仕組みを作りました。
18.
Deployの流れ 対象Socket.IOサーバのアプリのソースを更新し、pm2の deleteとstartを実行するスクリプトの実行(by capistrano)
DB上の該当Socket.IOサーバのレコードのstatusを inactive Socket.IOサーバは自身のレコードがinactiveになったこ とを検知すると、ClientsにinactiveイベントをBraodcast して、1分後に自身をexitするタイマーを実行 inactiveイベントを受信したクライアントは、もし1分間 以上同じページに留まったいた場合は接続が切断された 旨のpopupを出力(ページ更新した場合は新たなsocket.io サーバのアドレスを取得できるため問題なし) DB上の該当Socket.IOサーバのレコードのstatusをactive
19.
Socket.IOサーバ停止 シーケンス
20.
ご静聴ありがとうご ざいました
Download