1

socket.io ライブラリを使用する場合、さまざまなメソッドを配置する方法について少し混乱します。

私が持っている非常に単純なチャットアプリケーションではserver.js

io.sockets.on('connection', function(socket) {

    //some methods to handle when clients join.   

    socket.on('text', function(msg) {
        socket.broadcast.emit('text', msg);
    });
});

client.js:

var socket = io.connect();

socket.on('connect', function() {

    //some methods to fire when client joins.   

    socket.on('text', function(msg) {
        console.log(msg)
    });
});

現在、クライアントが参加したときに処理するメソッドと、その後のメッセージの送受信を処理するメソッドは、サーバー側とクライアント側の両方でconnect/イベント メソッド内に配置されていますが、この構造は、connectionクライアント側:

var socket = io.connect();    

socket.on('connect', function() {

    //some methods to fire when client joins.   

});

socket.on('text', function(msg) {
    console.log(msg)
});

+potentially many more methods...

私の質問は、メソッドを connect メソッドの内側と外側に配置することの基本的な違いは何ですか?また、最良のオプションと見なされるものは何ですか?

4

1 に答える 1

2

これを呼び出すと、

socket.on('xyz', function listener() {});

イベント をリッスンし、関数をイベント ハンドラーxyzとして追加します。発生するたびに実行されます。だからあなたがするとき:listenerxyz

socket.on('connect', function() {
    socket.on('text', function(msg) {
        console.log(msg)
    });
});

イベントが発生した場合にのみ、イベント ハンドラー/リスナーtextが追加されconnectます (接続イベント ハンドラーが実行されます)。リスナーは発生前に 1 つだけ、発生connect時に 2 つ (もう 1 つ)connectあります。しかし、あなたがするとき:

socket.on('connect', function() {
    //some methods to fire when client joins.   
});
socket.on('text', function(msg) {
    console.log(msg)
});

接続が発生する前後に、常に 2 つのリスナーが存在します。

前の方法は、より効率的で論理的です。text起こる前に起こることはできないので論理的connectです。なぜそれを聞くのですか。イベントループのように効率的で、探す必要のない不要なイベントがありません。イベントを追加しすぎてもそれほど問題にはならないかもしれませんが、パフォーマンスが重要なアプリケーションにとっては足かせになる可能性があります。後者は見栄えがよく、すべてのイベント ハンドラーが 1 つずつ配置されています。

于 2013-05-26T16:49:22.880 に答える