这是由于在最近的更改中对 nodejs 的 EventEmitter 库的提交造成的。我在 socket.io 上打开了一个问题。
https://github.com/LearnBoost/socket.io/issues/987
更新
从 socket.io 0.9.12 开始,此问题已得到修复
修复:
https ://github.com/LearnBoost/socket.io/blob/0.9.12/lib/manager.js#L116
提交:
https ://github.com/LearnBoost/socket.io/commit/0d3313f536d0231932dd6617db449a071f5bc03a
侦听端口时无法提供 socket.io.js。(节点 0.9.1-pre,socket.io 0.9.9)
由于最近提交到节点,您不能再拼接事件侦听器。这会导致 socket.io 在尝试访问 socket.io.js 客户端文件时显示欢迎消息,因为原始事件侦听器没有被删除。
破损示例:
var socketIO = require('socket.io').listen(8000);
由于节点 0.9.1-pre 更改了您可以访问 EventEmitter 库的侦听器的方式,这会中断。
破坏socket.io的nodejs提交
使 EventEmitter.listeners(event) 返回 listeners 数组的副本,而不是数组本身。
EventEmitter.prototype.listeners = function(type) {
if (!isArray(this._events[type])) {
this._events[type] = [this._events[type]];
}
- return this._events[type];
+ return this._events[type].slice(0);
};
https://github.com/joyent/node/commit/20e12e4be37f394672c001fdb9b05c0275731901#L1R245
相对socket.io代码:
// reset listeners
this.oldListeners = server.listeners('request').splice(0);
https://github.com/LearnBoost/socket.io/blob/master/lib/manager.js#L115