0

私はNode.jsのチュートリアルを経験しましたが、すべてがサーバー側からそれをどうするかを目的としていたようです。ノンブロッキングI/Oを使用して、ネットワーク上の複数のデバイスへの書き込みがどのように機能するかを確認するために、いろいろ試してみました。これが私がこれまでに持っているものです(大まかなコード、申し訳ありません):

var net = require('net');

var nodes = [<list of IP addresses>];

function connectToServer(ip) {
        conn = net.createConnection(3083, ip);
         console.log ("Creating connection to: " + ip + "\n");
        conn.on('connect', function() {
                conn.write ("act-user::myuser:ex1::mypass;");
        });
        conn.on('data', function(data) {
                var read = data.toString();
                if (read.match('ex1'))
                {
                        console.log(ip + ": " + read);
                }
        });
        conn.on('end', function() {
        });
}

nodes.forEach(function(node) {
        connectToServer(node);
});

リストを調べて各IPアドレスへの接続を開始しているのがわかりますが、同じホストにログイン行を何度も書き込んでいるようです。どこかでストリームが交差していると思いますが(Egonが決してそうしないと言ったように)、それを修正する方法がわかりません。ノンブロッキングのnode.jsの世界は、私が考えるのがまだ難しいです。

4

1 に答える 1

2

あなたの問題は JavaScript のねじれです。JavaScript では、変数をvar前に付けずに定義すると、グローバルとして設定されます。これはconn、関数内の変数で発生していconnectToServer()ます。conn上書きされており、connectToServerスコープを終了してもリセットされません。

次の前に var を追加してみてください。

conn = net.createConnection(3083, ip);

結果

var conn = net.createConnection(3083, ip);
于 2013-03-19T22:39:50.733 に答える