Учитывая следующий псевдокод JavaScript (пример 1),
, как вы можете видеть, есть 3 async streams
, которые в свою очередь пишут в ответ.Они, конечно, будут писать в ответ асинхронным способом, поэтому порядок чанков не сохраняется (это на самом деле непредсказуемо).
import pre from './pre';
import content from './content';
import post from './post';
export function renderIndex(req, res) {
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8',
'Transfer-Encoding': 'chunked',
});
const onEnd = () => {
if(!pre._readableState.ended) return;
if(!body._readableState.ended) return;
if(!post._readableState.ended) return;
res.end();
};
pre.on('data', (chunk) => { res.write(chunk); }).on('end', onEnd);
body.on('data', (chunk) => { res.write(chunk); }).on('end', onEnd);
post.on('data', (chunk) => { res.write(chunk); }).on('end', onEnd);
}
возможно ли сообщить клиенту позицию каждого чанкаданных?
Я хотел бы добиться чего-то вроде этого:
// ---- Stream 1 keep open
<html>
<head>
...
...
...
...
// --- Stream 2 keep open
<body>
...
...
...
// --- Stream 3 keep open
<script src="..."></script>
<script src="..."></script>
<script src="..."></script>
// --- Stream 1 CLOSE
</head>
// --- Stream 2 CLOSE
</body>
// --- Stream 3 CLOSE
</html>
// res.end()
- Range Requests
- Multipart Range
Мрамороподобное Объяснение:
- актуально :
[pre] [post] [body] [pre] [body] [/pre] [/post] [/body]
- желательно
[pre] [/pre] [body] [/body] [post] [/post]