NodeJS& Socket.io:由其他用户调用杀死的函数问题

时间:2015-08-30 18:34:28

标签: node.js sockets websocket socket.io

你好我需要一些socket.io,

的帮助

在我的应用程序中,用户需要连接到我的socket.io服务器,然后服务器启动进程并将有关进度的更新发送到客户端。 代码如下所示:

var MyProcess = require( './myProcess.js' );
var WebSocket = require( './class.websocket.js' );
var w = new WebSocket(8080);

w.on('connexion', function(socket){
    console.log('new client connected');
    (...)
    // client launch the process
    socket.on('process', function () {
        processAction( socket);
    });     
}); 

function processAction( socket )
{
    var f = new MyProcess();
    f.doProcess(function(percent){
        // progress received, (100 calls during 2-3mins)
        socket.emit("onProgress", percent);
    },function(){
        // process completed (only one call)
        socket.emit("onComplete");
    });
}

它适用于一个用户。 问题是当第二个用户连接时,函数processAction()似乎被杀死或覆盖。第二个用户收到他的进度,但第一个用户不再收到任何数据。

[编辑]每个用户只需要接收其进程的进度。就像NodeJS无法同时处理两个processAction()一样。再次调用它会杀死前一个调用和内部的局部变量。

你可以帮我解决这个问题吗? 非常感谢。 安东尼

1 个答案:

答案 0 :(得分:0)

所以解决方案(感谢jfriend00)是我这样做的:

var onProgress;

function MyProcess(){}

MyProcess.prototype.doProcess=function( pOnProgress)
{
    onProgress = pOnProgress;
    _doProcess();
}
function _doProcess()
{
    console.log("tick");
    onProgress();
    setTimeout(_doProcess, 1000);
}
module.exports = MyProcess;

而不是:

function MyProcess(){}

MyProcess.prototype.doProcess=function( onProgress)
{
    _doProcess(onProgress);
}
function _doProcess(onProgress)
{
    console.log("tick");
    onProgress();
    setTimeout(_doProcess, 1000, onProgress);
}
module.exports = MyProcess;

或者这个:

function MyProcess(){}

MyProcess.prototype.doProcess = function( onProgress)
{
    this.onProgress = onProgress;
    _doProcess(this);
}
function _doProcess(scope)
{
    console.log("tick");
    scope.onProgress();
    setTimeout(_doProcess, 1000, scope);
}
module.exports = MyProcess;