【发布时间】:2018-01-07 18:37:33
【问题描述】:
我正在尝试在 Node 中连续运行一些 shell 命令同时将一些信息发送回客户端。
为此,我结合使用 Socket.IO 和 Async.JS。
我来自 Python,每个命令一个接一个地完美运行。据我了解,Node 可以同时运行所有东西,这很棒,但有时我们需要一个接一个地运行一些东西。
这是我的服务器端代码:
io.on('connection', function(client) {
client.on('convertstart', function(data) {
async.series([
function (next) {
console.log('# STARTING -> room ' + room_);
client.join(data.room);
next(null, '');
},
function (next) {
io.to(data.room).emit('step0');
next(null, '');
},
function (next) {
var some_commands = require('child_process').execSync('some bash commands');
next(null, '');
},
function (next) {
io.to(data.room).emit('step1');
next(null, '');
},
function (next) {
var some_commands = require('child_process').execSync('some other bash commands');
next(null, '');
}
],
function (err, result) {
console.log(result);
});
});
});
这是我的客户端代码:
socket.on('step0', function(data){
for(var i = 0; i < 10; i++) {
(function(i){
setTimeout(function(){
$(".uk-progress").css('width', i + '%');
$(".uk-progress").text(i + '%');
}, 300 * i)
})(i);
}
});
socket.on('step1', function(data){
for(var i = 10; i < 30; i++) {
(function(i){
setTimeout(function(){
$(".uk-progress").css('width', i + '%');
$(".uk-progress").text(i + '%');
}, 300 * i)
})(i);
}
});
想法是将进度条从 0% 移动到 10%(使用 Socket.IO),然后做一些命令行操作,然后将进度条从 10% 移动到 30%(再次使用 Socket.IO) ,然后再做一些命令行操作等等。
目前,此代码只运行整个内容,而不会在每个操作之间停止。我想注意每个命令行命令需要 5 到 10 秒,所以进度条的进度不可能是线性的。
【问题讨论】:
标签: javascript node.js sockets websocket async.js