2017-10-21 85 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

相關問題