2015-09-13 61 views
0

我需要幫助如何將通知推送給特定用戶。我現在可以推送通知,但所有用戶都會收到通知。我可以過濾它的客戶爲例一面,但我認爲這是不安全的......如何推送通知給特定用戶Node + AngularJS + Laravel

首先我laravel 5發送數據:

$redis = Redis::connection(); 
$redis->publish('update.answer', json_encode($events)); 

這裏是我的node.js我emite數據:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var Redis = require('ioredis'); 
var redis = new Redis(); 
redis.subscribe('update.group', function(err, count) { 
}); 
redis.subscribe('update.question', function(err, count) { 
}); 
redis.subscribe('update.answer', function(err, count) { 
}); 
redis.subscribe('update.comment', function(err, count) { 
}); 
redis.on('message', function(channel, message) { 
    message = JSON.parse(message); 
    console.log(message); 
    io.emit(channel, message); 
}); 
http.listen(3000, function(){ 
    console.log('Listening on Port 3000'); 
}); 

和angularjs我拿數據並推送到客戶端。

socket.on('update.answer',function(data){ 
      if($scope.remove){ 
       $scope.remove = false; 
      } 
      $scope.feed = $("#feed").val(); 
      if(parseInt($scope.feed) === parseInt(data.userID)){ 
      $scope.answers.push(data); 
      $scope.$digest(); 
      } 
     }); 

本部分:

$scope.feed = $("#feed").val(); 
        if(parseInt($scope.feed) === parseInt(data.user_id) && data.admin_id !== null){ 

} 

我檢查,如果客戶應該得到通知,但它是不安全的......

什麼方法能改進呢?

回答

1

要將消息推送到特定用戶,您必須將他/她的參考存儲在某處。

爲前

io.on('connection', function(socket) { 
    socket.on('add-user', function(data){ 
     clients[data.username] = socket; 
     }); 
}); 

現在推的信息到指定的用戶只需使用自己的用戶名以檢索他的插座

clients[data.username].emit(channel, message); 

更新:說明

此假設每個用戶誰使用你的Web應用程序正在進行某種身份驗證。

只要用戶登錄到應用程序,讓他加入nodejs後端套接字。

在客戶端

socket.emit('add-user',userObj); 
     }); 

userObj是包含用戶詳細信息的對象,你可以在你的NodeJS單獨發送用戶名過於

socket.emit('add-user',username); 

第一decalre包含的插座一個陣列所有加入網站的用戶

var clients = []; 

現在在你的NodeJS應用程序寫這個額外的代碼

io.on('connection', function(socket) { 
     socket.on('add-user', function(data){ 
      clients[data.username] = socket; 
      }); 
    }); 

到這個時刻誰登錄到您的網站的用戶將調用來自將在上的NodeJS依次調用add-user,有插座將被添加到客戶端add-user事件客戶端陣列

現在要發送消息給你一定知道有任何的用戶名特定用戶,因此,如果您知道用戶的用戶名,那麼你可以使用

clients[data.username].emit(channel, message); 
+0

只是放出消息,他們莫非ÿ ou就我的例子解釋我該怎麼做? –

+0

不知道如何在我的代碼中實現這個... –

+0

第一個問題,你如何確定哪個用戶發送消息..? – maddygoround

相關問題