2017-10-21 19 views
1

我使用Redis的与socket.io '广播' 属性:Socket.IO类型错误:无法读取的不确定

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); 
}); 

我收到此:

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 ...

有什么不对? console.log(message.data.senderID);打印插口确定。谢谢..

回答

1

首先,请检查您的socket.io版本。 io.sockets.connected[socketid]只支持socket.io 1.x.x.

有更多的方式来获得一个参考。看看console.log(io)。

在2.x中您可以使用io.sockets.sockets[senserID].broadcast.emit。 //发送给任何人,除发送方 Refs this one

+0

我使用的是2.0.3(貌似最新)。我从laravel发送套接字,而不是js。 '\事件::火(新NewTopicCreated($ _COOKIE [ 'IO']));'所以我想送插座为大家从此套接字($ _COOKIE [ 'IO'])。无论如何?谢谢 ! – DisplayName

+0

你可以试试这个。 (message.data.senderID).emit(channel +“:”+ message.event,message.data.message)' –

+0

只是'io.emit'起作用,但它发送给发送者。 io.to不工作..任何错误,但不发送。我应该移动到1.x.x版本吗?我需要像io.from(..)之类的东西给除发件人之外的所有人。 – DisplayName

相关问题