请帮助!!
我使用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);
有人有任何建议如何解决这个问题。
//ķ
答案 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);
});