Sto provando a trasmettere audio al mio server e poi lo streaming su un servizio specificato dall'utente, l'utente mi fornirà someHostName
, che a volte può non supportare quel tipo di richiesta.readable.on ('end', ...) non viene mai attivato
Il mio problema è che quando succede il clientRequest.on('end',..)
non è mai sparato, penso che sia perché è di essere convogliato a someHostReq
che viene incasinato quando someHostName
è "sbagliato".
La mia domanda è:
C'è qualche cosa che posso ancora avere clientRequest.on('end',..)
sparato anche quando le flusso clientRequest
tubi a ha qualcosa che non va?
In caso contrario: come faccio a rilevare che qualcosa di sbagliato è successo con someHostReq
"immediatamente"? someHostReq.on('error')
non si avvia tranne dopo un po 'di tempo.
codice:
someHostName = 'somexample.com'
function checkIfPaused(request){//every 1 second check .isPaused
console.log(request.isPaused()+'>>>>');
setTimeout(function(){checkIfPaused(request)},1000);
}
router.post('/', function (clientRequest, clientResponse) {
clientRequest.on('data', function (chunk) {
console.log('pushing data');
});
clientRequest.on('end', function() {//when done streaming audio
console.log('im at the end');
}); //end clientRequest.on('end',)
options = {
hostname: someHostName, method: 'POST', headers: {'Transfer-Encoding': 'chunked'}
};
var someHostReq = http.request(options, function(res){
var data = ''
someHostReq.on('data',function(chunk){data+=chunk;});
someHostReq.on('end',function(){
console.log('someHostReq.end is called');
});
});
clientRequest.pipe(someHostReq);
checkIfPaused(clientRequest);
});
uscita:
nel caso di un corretto hostname:
pushing data
.
.
pushing data
false>>>
pushing data
.
.
pushing data
pushing data
false>>>
pushing data
.
.
pushing data
console.log('im at the end');
true>>>
//continues to be true, that's fine
nel caso di un nome host sbagliato:
pushing data
.
.
pushing data
false>>>>
pushing data
.
.
pushing data
pushing data
false>>>>
pushing data
.
.
pushing data
true>>>>
true>>>>
true>>>>
//it stays true and clientRequest.on('end') is never called
//even tho the client is still streaming data, no more "pushing data" appears
se pensi che la mia domanda sia un duplicato:
non è lo stesso di questo: node.js http.request event flow - where did my END event go?, il PO è stato solo fare un GET invece di un POST
non è lo stesso di questo: My http.createserver in node.js doesn't work?, il torrente era in modalità di pausa perché il nessuno dei seguenti successo:
È possibile passare alla modalità scorre effettuando una delle seguenti operazioni:
Aggiunta di un gestore eventi "dati" per l'ascolto dei dati.
Chiamare il metodo resume() per aprire esplicitamente il flusso.
Chiamare il metodo pipe() per inviare i dati a un Writable.
fonte: https://nodejs.org/api/stream.html#stream_class_stream_readable
- non è lo stesso di questo: Node.js response from http request not calling 'end' event without including 'data' event, ha appena dimenticato di aggiungere il
.on('data',..)
hai provato ad ascoltare 'chiudi 'invece? – aarosil
che cos'è lisyen close thread? Lo stream – bubakazouba
ha evento 'close' e anche 'end', vedi dettagli [qui] (https://nodejs.org/api/stream.html#stream_class_stream_readable) – aarosil