socket.on('connection'...事件从未触发nodejs + express + socket.io

时间:2011-12-08 01:03:08

标签: node.js websocket express socket.io

问题 socket.io无法正常工作

详情

  • 使用express [folder]; cd [folder]; npm install;
  • 生成项目
  • 设置socket.io npm install socket.io
  • 使用以下代码运行节点应用
  • 客户连接事件触发,但服务器连接从未触发。

设置

  • 服务器 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);           
 });

为什么连接事件永远不会被触发?

3 个答案:

答案 0 :(得分:12)

需要一段时间才能注意到...... connection上发出io.sockets事件。在你的代码中,这将是

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

您应该使用io代替socket作为var名称,以避免这种混淆。

答案 1 :(得分:1)

Ricardo Tomasi是正确的,救了我的命,我疯了。

我们在2013年,there's still an issue opened (since 2 years) on this

改变了

可能会有所改变,无论如何要注册“连接”。事件我不得不这样做:

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;
};

答案 2 :(得分:1)

以下为我做了一个技巧:socket.io-client:" ^ 0.9.16"

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

现在'连接'事件一直发生,没有重复使用。

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

至少这可能对那些将暂时解决这个问题的人有所帮助。