Я пытаюсь передавать данные с низкой задержкой и небольшими пакетами с сервера в браузер, используя fetch()
и ReadableStream
.Следующий код работает к моему удовлетворению на Safari и Chrome, но не на Firefox.Я думаю, что проблема заключается в том, что стратегия очереди ReadableStream, возвращаемая response.body.getReader()
в Firefox, отличается от стратегии Chrome или Safari.Мой сервер отправляет порцию данных один раз в секунду (размером примерно 100 байт), которые Chrome и Safari отдают моему javascript-коду с низкой задержкой (безусловно, менее 1 секунды), тогда как Firefox, по-видимому, накапливает несколько фрагментов (примерно 500 байт), прежде чем выдатьданные, в один большой кусок, в мой код.
Есть ли способ заставить Firefox вести себя как Chrome и Safari?В частности, как я могу уменьшить его задержку, в идеале, чтобы он давал моему коду куски, как только он их получает?
function do_stuff() {
console.log("creating request");
fetch("readable-stream").then((response) => {
console.log("got response", response);
const reader = response.body.getReader();
my_thingie(reader).then(_=>{
}).catch(x => {
console.log("catch 2 wrong:",x);
state.stream_status = 2;
});
}).catch(x => {
console.log("catch 1 wrong:",x);
});
}
async function my_thingie(reader) {
while(true) {
console.log("result 1");
const {done, value} = await reader.read();
console.log("result 2", done, value);
if (done) {
break;
}
};
}