0

次のサーバー側コードがあります。

        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 console出力されない) ことを期待しています。new userworkmysimplemsg

サーバー側のイベントがcustomevent呼び出されない理由と、クライアント側のイベントが呼び出されない理由はhail何ですか?

4

2 に答える 2

1

問題は、接続する前にクライアントから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 構文):

script(type='text/javascript',src='/socket.io/socket.io.js')
于 2012-12-11T19:50:15.290 に答える
0

最後にそれを理解しました。

では正常に動作していましたが、では動作しoperaませんでしたchrome and firefox。男がこのコードスニペットをサーバー側に挿入するように言っているこのリンクを見つけました。

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

今はうまくいっています。

于 2012-12-13T06:34:16.180 に答える