socket.on('连接'…事件永远不会触发nodejs + express + socket.io

问题 socket.io不工作

细节

  • express [folder]; cd [folder]; npm install;生成一个项目express [folder]; cd [folder]; npm install; express [folder]; cd [folder]; npm install;
  • 安装socket.io npm install socket.io
  • 运行下面的代码节点应用程序
  • 客户端连接事件触发,但服务器连接从未被解雇。

build立

  • 服务器 AWS免费套餐,Ubuntu 11.10,ami-a7f539ce
  • nodejs v0.6.5
  • express v2.5.1
  • socket.io v0.8.7

客户

  var socket = io.connect('http://example.com:3000'); socket.on('connect', function() { console.log('connected'); }); socket.on('message', function(msg){ console.log(msg); }); socket.on('disconnect', function() { console.log('disconnected'); }); socket.on('error', function (e) { console.log('System', e ? e : 'A unknown error occurred'); }); 

服务器

  [...] app.listen(3000); // socket.io setup var socket = require('socket.io').listen(app); // socket.io connection establishment socket.on('connection', function (client) { client.send("hello"); console.log("hello", client); }); 

为什么连接事件从未被解雇?

花了一段时间才能注意到… connection事件在io.sockets上io.sockets 。 在你的代码中,这将是

 socket.sockets.on('connection', function (client) { client.send("hello") console.log("hello", client) }) 

您应该使用io而不是socket作为var名称以避免混淆。

里卡多·托马西是正确的,拯救了我的生命,我疯了。

尽pipe事情发生了变化,但我们在2013年仍然有一个问题(从2年开始)

可能是有所改变,无论如何注册'连接'事件我不得不这样做:

 var openSocket = function (uniqueID) { var appSocket = io.connect('/'+uniqueID, { transports: ['websocket', 'xhr-polling']}); appSocket.socket.on('connect', function () { console.log('i did connect.'); }); return appSocket; }; 

以下为我做了一个窍门:socket.io-client:“^ 0.9.16”

 io.connect("http://localhost:4000", {'force new connection': true}); 

现在“连接”事件一直触发,没有重用。

我通过检查socket.io-client / lib / io.js行得出了这个选项:192因为我甚至无法在github中find这个io.js文件,我认为在将来的版本中会有重构,而且这个选项可能不会工作。

至less这可能会有助于那些将采取这种临时工作的人。