我正在尝试从服务器上的节点运行外部命令,并将该命令的输出逐行发送回客户端。也就是说,我希望在生成时发送输出,而不是在命令完成时发送。
服务器端代码正常工作 - 运行命令并逐行读取输出。我将客户端回调传递给服务器,以便在新数据到达时进行调用。这适用于第一行输出,但不适用于任何后续行。我已经验证服务器确实接收到后续的输出行,它们只是从未到达客户端。
服务器代码如下所示(简化)。
var spawn = require('child_process').spawn;
function run(cmd, cb) {
var child = spawn(cmd, []),
child.stdout.on('data', function(data) { cb(String(data)); });
}
socket.on("foo", function(cb) { return run("ls", cb); });
客户端使用此代码(再次简化)。
socket.emit("foo", function(data) {
console.log(data);
});
我在服务器或客户端没有收到任何错误消息。任何有关这方面的见解将不胜感激。
更新
我通过显式使用套接字将数据发送回客户端来解决了这个问题。作为参考,服务器代码现在看起来像这样。
function run(cmd, cb) {
var child = spawn(cmd, []),
child.stdout.on('data', function(data) {
socket.emit("output", String(data));
});
}
和客户。
socket.emit("foo", function(data) {
//
});
socket.on("output", function(data) {
console.log(data);
});
答案 0 :(得分:2)