2

何らかの理由で、新しいソケットがサーバーに接続するたびに、私の emitDraw 関数が描画の途中で停止します (process.nextTick() 呼び出しサイクルが予期せず壊れます)。新しい接続を受け入れながら、emitDraw 関数を実行し続ける方法はありますか?

io.sockets.on('connection', function(socket) {
    socket.on('drawing', function() {  
      //some code
      emitDraw(socket);
    });
});

function emitDraw(socket) {
    //some code
    process.nextTick(function(){emitDraw(socket)});
};

ありがとう

4

1 に答える 1

0

process.nextTick() は、コードを現在実行中のスタックから次のスタックの一番上にプッシュするのに役立つだけです。したがって、これら 2 つのスタック実行の間に発生したイベントのコールバックは、次のスタックでの実行が許可されます。

現在のケースでは、通常の実行中のスタックではemitDraw() のみが実行され、process.nextTick() への呼び出しにより、イベント (特にソケット接続) が発生し、次のスタックで実行されます。ソケット接続が開始されると、スタックには実行するコードの 2 つのセットがあります。

emitDraw() が応答しなくなった場合、パフォーマンスの低下なしに現在のスタックで同時実行できないことを意味するだけです。

メインの Node.js プロセスは単一のスレッドで実行されるため、処理能力を向上させない限り、同じスレッドに保持してもパフォーマンスの向上は期待できません。または、メイン プロセスから独立して実行できるように、emitDraw() を子プロセスにフォークすることもできます。

于 2012-06-06T07:08:01.893 に答える