NodeJS作为SSE-Client,具有多个连接



我在我的应用程序中使用iexoud第三方API。我坚持如何在NodeJS中为SSE请求创建多个连接。

let url = `https://cloud-sse.iexapis.com/stable/stocksUSNoUTP?token=${token}&symbols=aapl,amzn,twtr`
function connect() {
stream = request({
url: url,
headers: {
'Content-Type': 'text/event-stream'
}
})
}
connect();
stream.on('socket', () => {
console.log("Connected");
});
stream.on('end', () => {
console.log("Reconnecting");
connect();
});
stream.on('complete', () => {
console.log("Reconnecting");
connect();
});
stream.on('error', (err) => {
console.log("Error", err);
connect();
});
stream.on('data', (response) => {
var chunk = response.toString();
var cleanedChunk = chunk.replace(/data: /g, '');
if (partialMessage) {
cleanedChunk = partialMessage + cleanedChunk;
partialMessage = "";
}
var chunkArray = cleanedChunk.split('rnrn');
chunkArray.forEach(function (message) {
if (message) {
try {   
var quote = JSON.parse(message)[0];
console.log(quote);
} catch (error) {
partialMessage = message;
}
}
});
});
function wait () {
setTimeout(wait, 1000);
};
wait();

在这里我可以请求单个连接,我也可以接收流数据。

但我的情况是,如果我有两个url,如下所示:

https://cloud-sse.iexapis.com/stable/stocksUSNoUTP?token=${token}&symbols=aapl,amzn,twtr
https://cloud-sse.iexapis.com/stable/stocksUSNoUTP?token=${token}&symbols=isf,avv,nflx

我如何处理两个url分别与多个连接?

通过谷歌搜索没有得到足够的信息。

感谢

首先,在connect()中隐式地创建一个全局变量stream。不要这样做,因为这会导致bug。这很重要:当您当前的脚本第二次调用connect()时,它将重新制作stream,这意味着您已分配的所有事件处理程序将丢失。

所以,在那之后,一种方法是复制粘贴复制:stream1stream2作为全局变量,connect1()connect2()函数,url1url2

在这一点上,你有东西在工作。因此,除非它是一个一次性脚本,否则下一步将把Martin Fowler的Refactoring(第二版,从2018年开始,用JavaScript展示示例)从架子上拿下来并开始重构。例如,将数据事件处理程序拉出到一个独立的函数中。例如,让connect()url并返回stream(所有事件处理程序都已附加)。

最新更新