Считывание http / 2 push-потока завершается с ошибкой -505 - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь прочитать push-поток http / 2, но приведенный ниже код завершается с ошибкой.Когда я использую тот же URL в браузере Chrome, я получаю «сердцебиение», генерируемое потоковым сервером, и также вижу поступающие данные.Есть указатели?Моя цель - просто прочитать все push-ответы JSON, генерируемые сервером.

Error:
{ Error [ERR_HTTP2_ERROR]: Protocol error
    at Http2Session.onSessionInternalError [as error] (internal/http2/core.js:637:26)
  code: 'ERR_HTTP2_ERROR',
  name: 'Error [ERR_HTTP2_ERROR]',
  errno: -505 }

Node.JS Код:

const http2 = require('http2');
const client = http2.connect('http://api.service.com/absolute/path/subscribe?api_key={key}');

const req = client.request();
req.setEncoding('utf8');

req.on('response', (headers, flags) => {
  console.log(headers);
});

let data = '';
req.on('data', (d) => data += d);
req.on('end', () => {
    console.log('end');
    console.log(data); 
    client.destroy()
});
req.end();

Примечание: я новичок в Node.js, и http / 2 push stream также является для меня новой темой, так что считайте меня новичком, борющимся с этим.

1 Ответ

0 голосов
/ 18 марта 2019

Решено с некоторой помощью, с использованием библиотеки 'request': https://www.npmjs.com/package/request

const request = require("request");

const getPushData = () => {
    let completeResponse = "";
    request
    .get('http://api.service.com/absolute/path/subscribe?api_key={key}')
    .on('response', (response)=>{
        console.log("Response received successfully");
    })
    .on('data', (chunk)=>{
        console.log("Receiving the chunk...");
        console.log(chunk);
        let dataReceived = new Buffer(chunk).toString("utf8");
        console.log(dataReceived);

        completeResponse += chunk;        
    })
    .on('error', (err)=>{
        console.log("Something went wrong:");
        console.log(err.message);
    })
    .on("end", ()=>{
        console.log("The complete data received is:");
        console.log(completeResponse);
        let jsonObj = JSON.parse(completeResponse); 
        console.log(jsonObj);
    });
}

getPushData();

Примечание: проблема с этим сценарием в том, что если соединение разрывается, поток не возобновляется.

...