gpt4 book ai didi

javascript - 服务器使用 NodeJS 和 Redis 发送事件

转载 作者:行者123 更新时间:2023-12-03 09:42:02 26 4
gpt4 key购买 nike

我从Redis数据库接收更新(消息),我需要在客户端上实时显示这些消息,为此我使用SSE(服务器发送事件)。

所以,我的代码如下所示:

客户端 JavaScript:

var source = new EventSource('/updates');

source.addEventListener('pmessage', function(e) {
console.log('Event: ' + e.event);
console.log('Data: ' + e.data);
}, false);

服务器端(Node + Express):

    req.socket.setTimeout(Infinity);

var redisURL = url.parse(process.env.REDISCLOUD_URL);
var client = redis.createClient(redisURL.port, redisURL.hostname, {ignore_subscribe_messages: true});
client.auth(redisURL.auth.split(":")[1]);

client.psubscribe('updates');

client.on('error', function (err) {
console.log('Error: ' + err);
});

client.on('psubscribe', function (pattern, count) {
console.log('psubscribe pattern: ' + pattern);
console.log('psubscribe count: ' + count);
});

client.on('pmessage', function (pattern, channel, message) {
console.log('pmessage pattern: ' + pattern);
console.log('pmessage from channel: ' + channel);
console.log('pmessage message: ' + message);
res.write("data: " + message + '\n\n');
});

res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
res.write('\n');

我没有收到从服务器到客户端的任何更新(服务器正确地从redis接收到消息)。

如果我刷新服务器,我会收到此错误:net::ERR_INCOMPLETE_CHUNKED_ENCODING

我是 SSE 新手,所以可能我做错了。希望得到您的帮助。

最佳答案

解决方案是每次需要向客户端发送消息时编写 res.flush(),在我的例子中:

  client.on('pmessage', function (pattern, channel, message) {
console.log('pmessage pattern: ' + pattern);
console.log('pmessage from channel: ' + channel);
console.log('pmessage message: ' + message);
res.write("data: " + message + '\n\n');
res.flush();
});

已解决。

关于javascript - 服务器使用 NodeJS 和 Redis 发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31159592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com