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()connconnectToServer

尝试在以下内容前面添加 var。

conn = net.createConnection(3083, ip);

结果

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