【问题标题】:Socket.IO client library gives "welcome to socket.io" messageSocket.IO 客户端库给出“欢迎使用 socket.io”消息
【发布时间】:2012-08-07 00:23:01
【问题描述】:

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

我的设置

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

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

  6. 打开 http://domain.tld:8000 会显示“欢迎使用 socket.io”的消息

问题

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

感谢阅读和帮助!

【问题讨论】:

  • 你运行的是什么版本的socket.io和nodejs? (假设是最新的)现在。
  • socket.io 0.9.9,nodejs 0.9.1-pre
  • 我进行了一些挖掘,但没有发现任何突出的东西。我已经链接到 socket.io 代码的相关部分。我没有安装 0.9.1-pre,但你可以打开你的 node_modules 目录并围绕 socket.io 代码进行一些挖掘。 github.com/LearnBoost/socket.io/blob/master/lib/manager.js#L571
  • 好的,我同时做了什么:我也在我的虚拟机上安装了 node.js/socket.io 并且在为客户端库提供服务时遇到了同样的问题。似乎是一个错误。问题:如何对 node_modules 的修改应用更改? “npm 重建 socket.io”?只是更改了“欢迎使用 socket.io”消息,但它仍然显示原来的消息。
  • 应应用您在 node_modules 中所做的任何编辑。 Nodejs 将在 node_modules 内部查找通过require 请求的任何内容。应用更改后是否重新启动节点进程?编辑:在浏览所有文件后发现了一些有趣的东西。 github.com/LearnBoost/socket.io/blob/master/lib/…

标签: javascript node.js socket.io


【解决方案1】:

这是由于在最近的更改中对 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

【讨论】:

    【解决方案2】:

    几天前我遇到了这个问题。不得不将 socket.io 降级到 v0.8.7 并且运行良好。

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2014-01-20
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多