2017-10-21 36 views
1

J'utilise Redis avec socket.io:Socket.IO TypeError: Impossible de lire la propriété 'diffusion' undefined

var io  = require('socket.io')(6001); 
var Redis = require('ioredis'), 
var redis = new Redis(); 

redis.psubscribe('*'); 

redis.on('pmessage', function (pattern, channel, message) { 
    message = JSON.parse(message); 
    io.sockets.connected[message.data.senderID].broadcast.emit(channel + ':' + message.event, message.data); 
}); 

Je reçois ceci:

TypeError: Cannot read property 'broadcast' of undefined at Redis. (C:\socket\htdocs\project\server.js:12:46) at emitThree (events.js:135:13) at Redis.emit (events.js:216:7) at Redis.exports.returnReply ...

Quel est le problème? console.log(message.data.senderID); imprime la douille ok. Merci ..

Répondre

1

Tout d'abord, vérifiez votre version de socket.io. io.sockets.connected[socketid] juste pris en charge dans socket.io 1.x.x.

Il existe plusieurs façons d'obtenir une référence. Regardez simplement le fichier console.log (io). Dans les versions 2.x, vous pouvez utiliser io.sockets.sockets[senserID].broadcast.emit. // envoie à tout le monde sauf expéditeur Refs this one

+0

J'utilise 2.0.3 (ressemble à la dernière). J'envoie un socket de laravel, pas de js. '\ Event :: fire (new NewTopicCreated ($ _COOKIE ['io']));' Je veux donc envoyer un socket à tout le monde depuis ce socket ($ _COOKIE ['io']). Des façons? Je vous remercie ! – DisplayName

+0

Vous pouvez essayer celui-ci. 'io.to (message.data.senderID) .emit (channel +": "+ message.événement, message.data.message)' –

+0

juste 'io.emit' fonctionne, mais il envoie à l'expéditeur. io.to ne fonctionne pas .. toutes les erreurs, mais pas l'envoi. Devrais-je passer à la version 1.x.x? J'ai besoin de quelque chose comme io.from (..) .à tout le monde sauf l'expéditeur. – DisplayName