从回调中发出消息。 Express.io node.js

时间:2013-11-05 15:57:03

标签: node.js express socket.io

请帮助!!

我使用socket.io来路由我的套接字。 我遇到的问题是,在我的常规POST回调中,我需要将结果发送到一个组

req.io.room(room).broadcast('task', req.body)

但由于它是一个常规的post方法,因此对象剂量存在。

我试图像这样使用Route Forwarding

exports.callback = function(req,res){
 req.io.route('emitTask')
};

exports.emitTask= function(req){
   req.io.room(room).broadcast('task', req.body);
};

但是io对象剂量存在于那里。

我的路由看起来像这样。

app.post('/callback/:customer/:id', socket.callback);
app.io.route('emitTask', socket.emitTask);

有人有任何建议如何解决这个问题。

//ķ

1 个答案:

答案 0 :(得分:1)

您可以获得io对象,例如:

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

您需要以某种方式到达该对象才能执行以下操作:

io.sockets.in(room).emit('emitTask');

您可以将其作为单身人士使用:

// sockets.js
var io = ...;

exports.sendRoom = function (room, message) {
  io.sockets.in(room).emit(message);      
};

// routes/index.js
var sockets = require('./sockets');

app.post('/callback/:customer/:id', function (req, res) {
  sockets.sendRoom('myroom', 'emitTask');
  res.send(200);
});

更具可扩展性的解决方案是在您的应用中引入总线:一个跨模块调度事件的全局事件发射器:

// bus.js
module.exports = new require('events').EventEmitter();

// sockets.js
var bus = require('./bus'),
    io = ...;

bus.on('sendRoom', function (room, message) {
  io.sockets.in(room).emit(message);      
});

// routes/index.js
var bus = require('./bus');

app.post('/callback/:customer/:id', function (req, res) {
  bus.emit('sendRoom', 'myroom', 'emitTask');
  res.send(200);
});