0

助けてください!!

ソケットをルーティングできるようにするためにsocket.ioを使用しています。私が抱えている問題は、通常の POST コールバックで結果をグループに発行する必要があることです

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

しかし、それは通常のpostメソッドであるため、ioオブジェクトは存在しません。

私はこのようにルート転送を使用しようとしました

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

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

しかしそこにはオブジェクトが存在しません。

私のルーティングはこんな感じです。

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

この問題を解決する方法について誰か提案がありますか。

//K

4

1 に答える 1

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);
});
于 2013-11-05T16:44:33.980 に答える