2016-12-11 15 views
0

私はajaxポーリングからsocket.ioライブデータプッシュに切り替わりますが、イベント管理のベストプラクティスについては質問があります。Socket.ioイベントを処理するためのベストプラクティス?

のは、私はこのような基本的なサーバを持っているとしましょう:

var Clients = []; 
// Event fired every time a new client connects: 
io.on('connection', function(socket) { 
    Clients.push(socket); 
    // What else should go in here? 
    // Individual functions for each event? 

    socket.on('chat message', function(msg){ 
     console.log(':> '+msg); 
     io.emit('chat message', msg); 
    }); 

    // When socket disconnects, remove it from the list: 
    socket.on('disconnect', function() { 
     var index = Clients.indexOf(socket); 
     if (index != -1) { Clients.splice(index, 1); } 
    }); 
}); 

例でchat messageイベントがあるが、理想的に私はリアルタイムでクライアントにプッシュしたいのですが、他の多くのイベントがあります、

ユーザーがメッセージを送信し、ユーザーが入力を開始/停止し、ユーザーが投稿を好きになり、ユーザーがあなたを友人/グループメンバーに招待します。

私はリアルタイムでキャプチャしたいイベントがたくさんありますが、それらのすべてでいっぱいのio.on()ステートメントを掘り起こすよりも良い方法がなければならないようです。

私はノードOOPを調べましたが、必ずしもこのアプリケーションで役立つかどうかはわかりません。

私はsocket.on()ステートメントがあるので、私が説明したようにイベントキャッチを含めるのがベストプラクティスでしょうか?

答えて

2

私はリアルタイムでキャプチャしたいのですが、(io.onを詰め込むより良い方法がなければならないようにそれ はそう多くのイベント)それらすべてのフル ステートメントがあります。

いいえ。 io.on('connection', ...)の中には、新しい接続に関するsocket変数のクロージャがあります。だから、そのソケットから応答したいイベントハンドラがそこに入ったり、そこから呼び出してソケットを渡したりする関数の中に入ります。それはちょうどそれが動作する方法です。

FYIを、モジュール性の観点から、すべて1個のio.on('connection', ...)の内部に配置する必要はありません。 ioオブジェクトを他のモジュールにエクスポートするか、モジュールコンストラクタでそのオブジェクトに渡すと、他のモジュールで独自のio.on('connection', ...)リスナーを作成し、独自のio.on('connection', ...)の内部に独自のイベントハンドラをインストールすることができます。 ioはEventEmitterなので、connectionイベントのリスナーを任意の数だけサポートすることができ、すべてが通知されます。

+0

@ DanL - モジュール性の別のオプションについて別の段落を追加しました。 – jfriend00

関連する問題