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



你好,我需要一些帮助socket.io,

在我的应用中,用户需要连接到我的套接字。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()似乎被杀死或覆盖。第二个用户收到他的进度,但第一个用户不再收到任何数据。

[EDIT]每个用户只需要接收其进程的进度。这就像NodeJS不能处理两个processAction()同时运行。第二次调用它会杀死前一次调用和其中的局部变量。

你能帮我弄明白这个吗?非常感谢。安东尼

所以解决方案(感谢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;

或this:

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;

相关内容

  • 没有找到相关文章

最新更新