ルームを動的に作成する(フロントエンドからのリクエストに基づいて)。私はthis gistに続いた。io.sockets.in(roomName).on(myEvent)は参加後に動作しません
私は特定の部屋でイベントを聴き、部屋の他のメンバーにブロードキャストします。なぜ次のコードがそれをしていないのか分かりません。特に、2番目のログステートメントが決して起こらないのはなぜですか。私のコメントパー
io.sockets.on('connection', function (socket) {
socket.on('joinRoom', function (roomName) {
socket.join(roomName, function() {
console.log('joined ' + roomName); // logs properly
io.sockets.in(roomName).on('setVideoOnServer', function (inputUrl) {
console.log('setVideoOnServer: ', inputUrl); // not hitting here
io.sockets.in(roomName).emit('setVideoOnClient', inputUrl); // broadcast instead
});
});
});
});
「io.sockets.in(roomName).on(...)」という構造体はどうなっていると思いますか? – jfriend00
@ jfriend00 "ねえ、あなたの部屋はすべてソケットに入っています - このイベントを聞いて、これをやってください" –
私はそうではないと思います。 'io.sockets.in()'は 'eventEmitter'から派生した' Namespace'オブジェクトを返します。名前空間オブジェクトに '.on()'のオーバーライドはありません。だから、あなたがしていることは、名前空間オブジェクト自体にリスナーを追加することです。そして、たとえそれがあなたが思ったことを行ったとしても、新しいソケットがその部屋に加わるたびに重複イベントハンドラを追加することになります。これもまた問題になります。 – jfriend00