[英]Socket.io: Not emitting to specific socket.id
我試圖遍歷每個用戶的套接字數組,並通過他們的socketId發送消息...但是由於某種原因,它沒有在前端接收它。
我在下面嘗試了這些,但無濟於事。
https://github.com/Automattic/socket.io/issues/1618
Socket.io:無法使用socket.id將消息發送到特定套接字
后端:
users.forEach(function(subDoc){
console.log('>> notifyOnline: iterating user...')
console.log(subDoc);
// for every socket, send out an emit.
for (var j = 0, arr = subDoc.socketId.length; j < arr; j++ ) {
console.log('>> notfiyOnline: sending out good thoughts to clients...');
console.log('>> EMITTING' + subDoc.socketId[j] + 'is type ' + typeof subDoc.socketId[j] );
// These don't seem to do anything
io.sockets.to(subDoc.socketId[j]).emit('notification:new', packet);
io.to(subDoc.socketId[j]).emit('notification:new', packet);
}; // end - for each socket
}); // end - forEach user
前端:
// Listens for users followed online
socketFactory.on('notification:new', function (data) {
console.log('>> worldCtrl: Received live notification');
console.log(data);
$scope.$applyAsync(function() {
$scope.rootUser.notifications.push(data);
});
}); // end - socketFactory
編輯
@ jfriend00:以下用戶中每個用戶的數據結構。 我沒有放入代碼來清除舊的socketId,因此其中一些處於非活動狀態。 這是貓鼬查詢的結果:
// Mongoose Query:
model_onlineUser.find({ 'user._id' : { $in: followers }}, function (err, users) {
// notify users (backend code above)
}); // end - find
// Data structure: user in users
[{ _id: 553b49db2242347514c654a9,
user:
{ _id: '5503530ed3e910505be02cde',
displayName: 'some dudes name',
photo: 'some photo url' },
__v: 28,
followers:
[ '5525d19a5fb4ee095072c4ad',
'5525587a04f79c6e4d65015d',
'55067b0638d1c47238ebabbb' ],
socketId:
[ '2K1_8WQ1JZMUjLx3AAAF',
'xJqixhGiRb5HYxcoAAAD',
'7fDqV_DBP3FCTIlLAAAF' ] }]
編輯2
新增:用戶通過passport.js(facebook auth)登錄后,重定向導致套接字斷開連接,因此socket.id變得無效...現在的問題是它無法重新建立連接...即使使用forceNew : true
。
解決了:
問題1:重新連接失敗。
斷開連接(在Passport登錄身份驗證之后)時,socket.io並未重新建立連接,因此我在數據庫中擁有的socketId變得過時了。 通過將其添加到客戶端io.on('connect')
來解決此問題:
{ 'forceNew' : true }
問題2:本地測試環境
我的測試過程要求將消息發送給其他計算機上的用戶。 我們正在兩個單獨的本地服務器上進行測試,因此我們試圖向彼此的本地主機發出信號。 當我們將測試轉移到單個服務器上時,套接字按預期開始工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.