2011-06-27 24 views
1

这是我的代码的NodeJS:有什么问题我简单的NodeJS代码

var io = require('socket.io').listen(8011); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

和客户端HTML是:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

当我使用节点a.js运行它,我得到的以下错误:

node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
TypeError: Object 8011 has no method 'listeners' 
    at new <anonymous> (/home/zjm1126/node_modules/socket.io/lib/socket.io/listener.js:29:31) 
    at Object.listen (/home/zjm1126/node_modules/socket.io/lib/socket.io/index.js:11:10) 
    at Object.<anonymous> (/home/zjm1126/桌面/app/a.js:1:93) 
    at Module._compile (module.js:407:26) 
    at Object..js (module.js:413:10) 
    at Module.load (module.js:339:31) 
    at Function._load (module.js:298:12) 
    at Array.<anonymous> (module.js:426:10) 
    at EventEmitter._tickCallback (node.js:126:26) 

但这是http://socket.io/演示代码,为什么会出现这个错误?

更新:

当我运行npm update socket.io,在服务器端运行

,但客户端给出了这样的错误:

io is not defined 
var socket = io.connect('http://localhost:8011'); 

有什么不对呢?

+3

你使用的是socket.io 0.7或socket.io 0.6吗?使用'npm update socket.io'来更新到最新版本。 – Raynos

+0

非常感谢~~ – zjm1126

+0

嗨@Raynos,看看更新。 – zjm1126

回答

0

您在下面指定的代码是用于socket.io 0.7.x(API),而不是用于0.6.x,因此这是错误可能出现的位置。您应该尝试npm update socket.io。而且您使用的socket.io客户端HTML代码相同的node.js服务器或从其他服务器(PHP或东西例如)

[email protected]:~/node/socketio-demo$ npm ls 
/home/alfred/node/socketio-demo 
└─┬ [email protected] 
    ├── [email protected] 
    └── [email protected] 

:我的依赖关系将根据npm ls以下。


我也通过PHP做的试验:

mkdir socketio-demo` 
cd socketio-demo` 
gedit server.js # my quick/dirty editor 

var io = require('socket.io').listen(8011); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

[email protected]:~/node/socketio-demo$ node server.js 
    info - socket.io started 

我也有一个PHP服务器上的端口80上运行:

gedit socket.php 

<script src="http://localhost:8011/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8011/'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

当另一台主机上,你需要更新<script src="http://localhost:8011/socket.io/socket.io.js"></script>指向您socket.io服务器

var socket = io.connect('http://localhost:8011/');指向您socket.io服务器。使用这个设置,我可以在没有任何问题的情况下工作。

0

ZJM - 我有一个相同的构建你的(试图让它开箱即用)。我得到了一个不同的错误(socket.js文件正在被服务和记录,但没有连接发生)。我认为(90%肯定 - 似乎也有一些缓存问题),在客户端,提供没有参数的socket.io解决了问题。

不知道这是否会帮助你,但希望它