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使用更好的传输。我认为我的逻辑有问题。我现在用另一种方式试过了,效果很好。