2016-06-16 8 views
2

私はフロントエンドのReactアプリケーションとのソケット接続を開く明示的なアプリケーションを持っています。socket.ioがexpress app.postコールバックで発行されない

誰かがjsonデータで私のサーバに投稿要求を送るが、socket.emitがa.postコールバックで起動しないときはいつでも、接続されたソケットにイベントを出したい。 io.sockets.emitしかし、うまく動作しますが、この場合は私には役に立たないです。

io.on('connection', (socket) => { 
    app.post('/event', (req, res) => { 
     socket.emit('someevent', req.body); 
     res.sendStatus(200); 
    } 
} 

をしかし、これは渡します:

これは失敗し

io.on('connection', (socket) => { 
    app.post('/event', (req, res) => { 
     io.sockets.emit('someevent', req.body); 
     res.sendStatus(200); 
    } 
} 
+0

ソケット接続ごとに別々のポストハンドラを追加しています(1つのルートハンドラしか実行できません)。 。 – SLaks

答えて

2

SLaksのコメントは正しいですが、それは私が私の問題を解決する助けにはなりませんでした。

私は何をやってしまったことは次のとおりです。クライアントから/eventに来POSTリクエスト

  1. 、私は、ソケット接続のIDを含む隠し入力フィールドを追加しました。
  2. はその後、私の/eventルートハンドラで、私がやった:

    app.post('/event', function(req, res) { 
        io.sockets.in(req.body.socketId).emit('someevent', req.body); 
        res.sendStatus(200); 
    }); 
    

を各ソケット接続はそのソケット-idとメッセージで識別部屋を使って部屋に送信することができます参加し、デフォルトではこれは動作しますioオブジェクトiteself(ソケットオブジェクトを取得する必要はありません)

関連する問題