Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在服务器上的.on()回调中不触发发射事件_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 在服务器上的.on()回调中不触发发射事件

Javascript 在服务器上的.on()回调中不触发发射事件,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我试图构建一个系统,其中一个节点控制另一个节点,如下所示: var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') app.listen(8000); io.configure(function () { io.set("origins = *"); io.set("transports", ["xhr-polli

我试图构建一个系统,其中一个节点控制另一个节点,如下所示:

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(8000);

io.configure(function () { 
  io.set("origins = *");
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});




var screen = io.of('/screen').on('connection', function (socket) {
    screen.emit('news', { hello: 'screen' });
  });

var controls =  io.of('/controls').on('connection', function (socket) {
    controls.emit('news', { hello: 'world 2' });

    controls.on('controlPressed', function(data){
        console.log(data);
        screen.emit('cp', data);
    });

  });
io.of('namespace').emit('cp', data);
但是,在controlPressed的回调中,会记录数据,但不会发出事件屏幕。emit('cp',data)


当我在回调之外发出事件时,客户端会正确地接收它。

最好这样做:

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(8000);

io.configure(function () { 
  io.set("origins = *");
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});




var screen = io.of('/screen').on('connection', function (socket) {
    screen.emit('news', { hello: 'screen' });
  });

var controls =  io.of('/controls').on('connection', function (socket) {
    controls.emit('news', { hello: 'world 2' });

    controls.on('controlPressed', function(data){
        console.log(data);
        screen.emit('cp', data);
    });

  });
io.of('namespace').emit('cp', data);

我的逻辑有问题。我尝试使用express,现在它可以这样工作:

var fs = require('fs')
  , Moniker = require('moniker')
  , express = require("express")
  , app = express()
  , port = process.env.PORT || 8000
  ;


app.set('port', port);
app.get('/controlls', function(req, res){


 fs.readFile(__dirname + '/controlls.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });

});

app.get('/', function(req, res){

 fs.readFile(__dirname + '/screen.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });


});

server = app.listen(8000);
var io = require('socket.io').listen(server);

var interfaces = [];

io.sockets.on('connection', function(client){
    client.on('hello', function(data){

        interfaces[data.screen] = client;
        console.log(interfaces);
    });

    if(interfaces['controlls'] && interfaces['screen']){

    interfaces['controlls'].on('controlPressed', function(data){
        console.log(data);
        interfaces['screen'].emit('cp', data);
    });

    }

});

谢谢你的回复。不幸的是,这也不起作用。我也试着把它发到控制器上。这也不起作用。您的代码似乎还可以,但您是否已将客户端代码引用到这些名称空间?另外,通过删除io.configure()方法尝试使用默认配置,看看它是否有效。如果是,那么问题在于您自己定义的配置,因为您不允许socket.io使用更好的传输。我认为我的逻辑有问题。我现在用另一种方式试过了,效果很好。