socket.on('connection' ...事件从未触发 NodeJS + Express + socket.io



问题插座。io不工作

  • express [folder]; cd [folder]; npm install;
  • 生成一个项目
  • 设置套接字。io npm install socket.io
  • 使用下面的代码运行节点应用程序
  • 客户端连接事件触发,但服务器连接从未触发。
设置>
  • 服务器 AWS免费版,Ubuntu 11.10, ami-a7f539ce
  • nodejs v0.6.5
  • express v2.5.1
  • 插座。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上。在你的代码中,这应该是

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

您应该使用io而不是socket作为变量名,以避免这种混淆。

Ricardo Tomasi是对的,救了我的命,我要疯了。

虽然事情发生了变化,但我们已经在2013年了,仍然有一个问题(自2年以来)在这个

可能发生了一些变化,无论如何,为了注册'connect'事件,我必须这样做:

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

现在'connect'事件持续触发并且没有重复使用。

我通过检查socket.io-client/lib/io.js行:192找到了这个选项因为我甚至不能在github中找到这个io.js文件,我认为在未来的版本中有重构,这个选项可能不起作用。

相关内容

  • 没有找到相关文章