我正在尝试创建一个存储并显示实时通知给用户的通知系统,但是我似乎无法弄清楚如何使用当前的Socket-Io为单个用户存储和显示多个通知和Redis设置。我之所以无法实现这一目标的部分原因可能是由于我缺乏对Redis和Pub / Sub功能的经验,但是我不确定是否需要对SocketIo和Redis存储关系进行调整或这通常是在这些模块之外通过数组来处理的。
这是我的服务器端代码:
var redisAdapter = require('socket.io-redis');
var io = require("socket.io").listen(server);
io.adapter(redisAdapter({
host: process.env.REDIS_ENDPOINT || 'localhost',
port: 6379
}));
var userNotification = {};
io.sockets.on('connection', function(socket) {
io.of('/').adapter.clients((err, clients) => {
console.log("Socket IO Clients")
console.log(clients); // an array containing all connected socket ids
});
socket.emit('notification', userNotification);
//Client Notification
socket.on('client-notification', function(data) {
userNotification.data = data;
});
});
客户端:
$(document).ready(function() {
var socket = io.connect('http://localhost:3000');
socket.on('notification', function (data) {
console.log(data);
});
});
在当前设置下,会生成以下套接字客户端ID,但我不确定如何解释。
1)会话开始
[ 'GMs7nTrAHQ4z9o7KAAAC' ]
2)用户提交触发notification
[ 'GMs7nTrAHQ4z9o7KAAAC', 'e4U1kcC6Jg0Ey45IAAAD' ]
3)刷新页面或加载新页面。 notification
现在出现在导航栏中
[ '_T8oFXhrUyfwWpjqAAAF' ]
以下是使用redis-cli运行PUBSUB CHANNELS
的响应:
1) "socket.io-response#/#"
2) "socket.io-request#/#"
答案 0 :(得分:0)
当客户端连接时,您当前仅发出一个通知。要为每个client-notification
事件发出通知,请按以下方式使用:
var redisAdapter = require('socket.io-redis');
var io = require("socket.io").listen(server);
io.adapter(redisAdapter({
host: process.env.REDIS_ENDPOINT || 'localhost',
port: 6379
}));
var userNotification = {};
io.sockets.on('connection', function(socket) {
io.of('/').adapter.clients((err, clients) => {
console.log("Socket IO Clients")
console.log(clients); // an array containing all connected socket ids
});
socket.emit('notification', userNotification);
//Client Notification
socket.on('client-notification', function(data) {
userNotification.data = data;
socket.emit('notification', userNotification);
});
});