Socket.IO客户端库提供“欢迎来到socket.io”消息

一段时间后,我再次尝试使用node.js和socket.IO,但它没有按预期工作:

我的设置

  1. 从github下载node.js,并将其编译到我的外部web服务器上运行debian squeeze
  2. 为node.js项目创build了一个目录
  3. 在npm本地添加了socket.io
  4. 创build了socketIO_server.js,并添加了这一行代码:

    var socketIO = require('socket.io').listen(8000); 
  5. 开始socketIO_server.js和控制台日志说“信息 – 套接字.io开始”

  6. 打开http://domain.tld:8000会提示“welcome to socket.io”

问题

当我尝试通过http://domain.tld:8000 / socket.io / socket.io.js访问客户端库时,它也会提供“welcome to socket.io”消息,但控制台日志显示“已提供静态内容/socket.io.js”。 我不知道为什么会发生这种情况! 我虽然并行运行的nginx服务器导致这个问题,但停止服务器并没有改变任何东西。

感谢您的阅读和帮助!

这是由于在最近一次更改中对nodejs的EventEmitter库进行的提交而造成的。 我在socket.io上打开了一个问题。

https://github.com/LearnBoost/socket.io/issues/987

UPDATE

这个问题已经被修正为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库的监听器的方式,这个打破了。

nodejs的提交,打破了socket.io

使EventEmitter.listeners(event)返回监听器数组的副本,而不是数组本身。

 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

几天前我遇到了这个问题。 不得不将socket.io降级到v0.8.7并且工作正常。