Node.js Nodejs simple socket.io示例不工作

Node.js Nodejs simple socket.io示例不工作,node.js,socket.io,Node.js,Socket.io,我有以下服务器端代码: var express = require('express') , http = require('http') , routes = require('./routes') , io = require('socket.io') , factory = require('./serverfactory.js'); var app =

我有以下服务器端代码:

        var express = require('express')
          , http    = require('http')
          , routes  = require('./routes')
          , io      = require('socket.io')
          , factory = require('./serverfactory.js');
          var  app  = express();

          var server = app.listen(3000);
          io = io.listen(server);

          io.sockets.on('connection',function(socket){

            console.log('new user');

            socket.emit('hail','mysimplemsg');
            socket.on('customevent',function(msg){
                console.log(msg);       
            });
          });



        //var app = module.exports = express.createServer();

        // Configuration

        app.configure(function(){
          app.set('views', __dirname + '/views');
          app.set('view engine', 'jade');
          app.use(express.bodyParser());
          app.use(express.methodOverride());
          app.use(app.router);
          app.use(express.static(__dirname + '/public'));
        });

        app.configure('development', function(){
          app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
        });

        app.configure('production', function(){
          app.use(express.errorHandler());
        });

        // Routes
        app.get('/', routes.index);
这是客户端:

    var socket = io.connect('http://localhost:3000');
    socket.emit('customevent','work');
    socket.on('hail',function(msg){
        console.log(msg);
    });
我希望我的
git控制台
输出
新用户
(它有),然后它应该输出
工作
(它没有),然后我在浏览器控制台
mysimplemsg
(它没有)


为什么服务器端的
customevent
事件没有被调用,而客户端的
hail
事件没有被调用,这是怎么回事?

我认为问题在于,在连接之前,您正在从客户端发出customevent。尝试添加连接处理程序并将客户端发射移动到其中:

var socket = io.connect('http://localhost:3000');    
socket.on('hail',function(msg){
    console.log(msg);
});
socket.on('connect',function(){
                      console.log('connected to socket.io server');
                      socket.emit('customevent','work');
                    });
如果未命中连接处理程序,请验证是否正确引用了客户端socket.io javascript库(jade语法):


我终于明白了

它在
opera
上运行正常,但在
chrome和firefox上运行不正常。我找到了那个家伙说在服务器端插入这个代码片段的链接

io.configure('development', function(){
  io.set('transports', ['xhr-polling']);
});

现在一切正常。

查看下面@nFreeze的答案,并查看更多示例Hnx以获取您的答复我按照您所说的做了,但我仍然只能在日志中看到
新用户
消息no
work
消息显示在我的git中的日志中。
socket.on('connect')
不起作用。我调试了代码,但客户端没有在日志中发送任何内容。可能是什么问题?这段代码对我很有用。验证您是否正确托管socket.io客户端库。是的,我托管的是正确的。我不知道为什么不触发此事件,这让我抓狂。我从3天起就遇到了此问题。我从
socket.io/#如何使用
复制粘贴了完全相同的代码,但仍然存在相同的问题。抱歉,我忘了在嗯,我想对websocket使用socket.io,而不是xhr轮询。这不是解决办法。
io.configure('development', function(){
  io.set('transports', ['xhr-polling']);
});