Estoy usando la API de terceros de IEXCloud en mi aplicación. Estoy atascado con la forma de crear múltiples conexiones para la solicitud de SSE en NodeJS.
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();Aquí puedo solicitar la conexión única y también puedo recibir datos de transmisión.
Pero mi escenario es si tengo dos URL como las siguientes.
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¿Cómo manejo ambas URL por separado con conexión múltiple?
No obtener suficiente idea al buscar en Google.
Gracias
Primero, está creando implícitamente una stream de variable global en su connect() . No hagas esto, ya que conduce a errores. Esto es muy importante: cuando su secuencia de comandos actual llame a connect() por segunda vez, estará rehaciendo stream , lo que significa que todos los controladores de eventos que ha asignado se perderán.
Entonces, después de eso, una forma de hacerlo es copiar y pegar la duplicación: stream1 y stream2 como funciones globales, connect1() y connect2() , y url1 y url2 .
En ese punto tienes algo funcionando. Entonces, a menos que sea un script descartable, el siguiente paso será sacar Refactoring de Martin Fowler (la segunda edición, de 2018, muestra ejemplos en JavaScript) del estante y comenzar a refactorizar. Por ejemplo, extraiga el controlador de eventos de datos en una función independiente. Por ejemplo, haga que connect() tome la url y devuelva el stream (con todos los controladores de eventos ya adjuntos).