Javascript SSE/Redis-如何恢复SSE脱机时发送的消息
在一个网站上,我有一个非常简单的实时聊天设置,使用SSE/Redis和pub/sub结构 基本设置(无需详细说明)为:Javascript SSE/Redis-如何恢复SSE脱机时发送的消息,javascript,redis,server-sent-events,eventsource,Javascript,Redis,Server Sent Events,Eventsource,在一个网站上,我有一个非常简单的实时聊天设置,使用SSE/Redis和pub/sub结构 基本设置(无需详细说明)为: 客户端使用EventSource 打开SSE连接并订阅SSE守护进程发送的实时事件。将消息发送到API端点 connect(hash, eventListener) { const url = `${url}?client=$hash=${hash}`; sseSource = new EventSource(url); sseSource.onop
EventSource
connect(hash, eventListener) {
const url = `${url}?client=$hash=${hash}`;
sseSource = new EventSource(url);
sseSource.onopen = function(e) {
reconnectFrequencySeconds = 1;
}
sseSource.onerror = err => {
this.closeSSEStream();
this.reconnectSSEStream(hash, eventListener);
};
sseSource.addEventListener('messages', event => {
const messages = JSON.parse(event.data);
eventListener(messages);
});
},
const subscriber = redis.createClient();
subscriber.select(config.redisDatabase);
subscriber.on('message', function (channel, message) {
log(connectionId, 'Redis: new msg on channel: ' + channel, message);
let event = {
event: 'messages',
data: message
};
currentClient.connection.write(event);
});
整个过程运行得很好,但离完美还有一步之遥。
在部署期间,我们重新启动工作进程(包括SSE守护进程),当它脱机时,用户不会收到实时更新。它可以很好地重新连接,但在停机期间发送的消息会丢失(因为守护进程仅在重新连接时才开始侦听消息)
我唯一想到的解决方案是一个过度工程化的解决方案,其中“丢失”的消息在重新连接时通过单独的API端点收集并显示给用户
在订阅频道之前,是否有现成的方式接收已存储到Redis的消息?例如“pop”未处理的消息或类似的东西