如何推送通知到特定用户Node + AngularJS + Laravel
How to push notification to specific user Node + AngularJS + Laravel
我需要帮助如何向特定用户推送通知。我现在可以推送通知但所有用户都会得到那个通知。我可以在客户端过滤,但我认为这是不安全的…
首先我用laravel 5发送数据:
$redis = Redis::connection();
$redis->publish('update.answer', json_encode($events));
这是我的node.js数据:
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();
}
});
WIth this part:
$scope.feed = $("#feed").val();
if(parseInt($scope.feed) === parseInt(data.user_id) && data.admin_id !== null){
}
我检查客户端是否应该收到通知,但它是不安全的…
有什么办法可以改善吗?
要将消息推送给特定的用户,必须将他/她的引用存储在某个地方。
为例
io.on('connection', function(socket) {
socket.on('add-user', function(data){
clients[data.username] = socket;
});
});
现在将消息推送到特定用户只需使用他的用户名来检索他的套接字
clients[data.username].emit(channel, message);
Update: Explanation
This假设每个使用你的web应用程序的用户都有某种身份验证
一旦用户登录到你的应用程序,让他加入nodejs后端套接字。
客户端
socket.emit('add-user',userObj);
});
userObj是包含用户详细信息的对象,您也可以单独发送用户名
socket.emit('add-user',username);
在nodejs中首先声明一个数组,该数组包含所有加入网站的用户的套接字
var clients = [];
现在在nodejs应用程序中编写以下附加代码
io.on('connection', function(socket) {
socket.on('add-user', function(data){
clients[data.username] = socket;
});
});
到目前为止,登录到您的网站的用户将从客户端调用add-user
事件,这将反过来在nodejs上调用add-user
, socket将被添加到客户端数组
现在发送消息给任何特定的用户,你必须知道他们的用户名,所以如果你知道用户的用户名,那么你可以简单地发送消息给他们使用
clients[data.username].emit(channel, message);
相关文章:
- 使用angularjs和node.js时的Web应用程序文件夹结构
- 如何使用Node.js/MongoDB在AngularJS应用程序中获取特定于目标的数据
- 尝试通过angularjs和node将用户数据发送到mongodb
- $locationProvider html5mode导致“;无法获取“;刷新时出错-AngularJS Node应用程
- 使用用户名和密码使用node js,AngularJs和JWT进行身份验证
- Angularjs在node-webkit应用程序中将image src更改为“unsafe:”
- 在现有Node.js、Express、MongoDB和Socket.io Stack之上添加AngularJS
- angularjs和node.js之间共享库的模式
- Angularjs route for node express js backend
- 如何:将node.js mongodb结果传递给angularjs
- AngularJS ui.router not rendering view [Node.js]
- Meteor angularjs “Node.replaceChild 不实现接口 Node” 错误
- 服务页面,AngularJS与Node JS
- Angularjs html5Mode(true) 页面重新加载错误与 Node.js 服务器
- Node/AngularJS-类型错误:无法读取属性'_id'的未定义
- AngularJS和Node.js与ExpressJS集成
- 使用node.js和angularjs将未经身份验证的用户重定向到默认URL
- 在Node/AngularJS应用程序中调整和压缩AJAX图像
- 如何推送通知到特定用户Node + AngularJS + Laravel
- Node + AngularJS的ngRoute没有显示正确的视图