繁体   English   中英

NodeJS 作为具有多个连接的 SSE 客户端

[英]NodeJS as SSE-Client with multiple connections

我在我的应用程序中使用 IEXCloud 第三方 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('\r\n\r\n');

    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 不要这样做,因为它会导致错误。 这很重要:当您当前的脚本第二次调用 connect() 时,它将重新制作stream ,这意味着您分配的所有事件处理程序都将丢失。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM