SocketIo 和 Redis 多重发射处理



我正在尝试创建一个通知系统来存储和显示对用户的实时通知,但我似乎无法弄清楚如何使用我当前的 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#/#"

当前客户端连接时仅发出一个通知。若要为每个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);
});
});

最新更新