你好,我需要一些帮助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;