Socket.IO客户端库提供“welcome to socket.io”消息

时间:2012-08-09 17:50:23

标签: javascript node.js socket.io

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

我的设置

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

    var socketIO = require('socket.io').listen(8000);
    
  7. 启动了socketIO_server.js,控制台日志显示" info - socket.io已启动"

  8. 打开http://domain.tld:8000会显示消息"欢迎来到socket.io"
  9. 问题

    当我尝试通过http://domain.tld:8000/socket.io/socket.io.js访问客户端库时,它还会给出消息" welcome to socket.io",但控制台日志显示"提供的静态内容/套接字。 io.js&#34 ;.我不知道为什么会这样! 我虽然运行并行的nginx服务器导致了这个问题,但停止服务器并没有改变任何东西。

    感谢阅读和帮助!

2 个答案:

答案 0 :(得分:6)

这是由最近更改中对nodejs的EventEmitter lib的提交引起的。我在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。 (node 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 lib的侦听器的方式,这会中断。

nodejs提交破坏了socket.io

  

Make 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

答案 1 :(得分:0)

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