【发布时间】:2011-12-16 09:11:48
【问题描述】:
以下代码:
req.form.on('progress', function(bytesReceived, bytesExpected){
var percent = (bytesReceived / bytesExpected * 100) | 0;
// progressEvent.download(percent);
io.sockets.on('connection', function (socket) {
socket.emit('progress', { percent: percent});
client = socket;
});
});
写在一个 http post handler (express.js) 向客户端 js 发送套接字消息,但它显然创建了大量的侦听器,事实上它警告我说: “节点)警告:检测到可能的 EventEmitter 内存泄漏。添加了 11 个侦听器。使用emitter.setMaxListeners() 增加限制。”
另一方面,这段代码:
io.sockets.on('connection', function (socket) {
progressEvent.on('progress', function(percentage) {
console.log(percentage);
socket.emit('progress', { percent: percentage});
});
});
不向客户端发回任何消息,ProgressEvent 是:
var util = require('util'),
events = require('events');
function ProgressEvent() {
if(false === (this instanceof ProgressEvent)) {
return new ProgressEvent();
}
events.EventEmitter.call(this);
}
util.inherits(ProgressEvent, events.EventEmitter);
ProgressEvent.prototype.download = function(percentage) {
var self = this;
self.emit('progress', percentage);
}
exports.ProgressEvent = ProgressEvent;
我在这个奇怪的问题上度过了愉快的一天,我真的不明白为什么 socket.io 不向客户端发送套接字消息。
整个项目在这里:https://github.com/aterreno/superuploader
感谢您的关注和帮助
【问题讨论】:
标签: javascript node.js express socket.io