我正在Firebase中设置一个Node.js Express服务器。我有一个仪表板页面。用户可以随时使用Chrome扩展程序将项目保存到其仪表板上。我希望他们新保存的项目定期出现在仪表板上。
繁忙的轮询似乎很容易运行
setInterval( () => {
// async call to api with paging cursor
但这似乎浪费资源。
我阅读了有关服务器端事件的信息,并尝试通过代码实现它们。我见过的所有SSE示例看起来都是这样的:
var clients = {}; // <- Keep a map of attached clients
app.get('/events/', function (req, res) {
req.socket.setTimeout(Number.MAX_VALUE);
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
res.write('\n');
(function (clientId) {
clients[clientId] = res;
req.on("close", function () {
delete clients[clientId]
});
})(++clientId)
});
setInterval(function () {
var msg = Math.random();
console.log("Clients: " + Object.keys(clients) + " <- " + msg);
for (clientId in clients) {
clients[clientId].write("data: " + msg + "\n\n"); // <- Push a message to a single attached client
};
}, 2000);
让SSE事件正常工作在测试示例中没有问题,并且适用于我的用例。
但是,我的担忧:
企业级应用实际上如何实施有效的SSE?