你好我需要一些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()一样。再次调用它会杀死前一个调用和内部的局部变量。
你可以帮我解决这个问题吗? 非常感谢。 安东尼答案 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;