mirror of
https://github.com/denoland/deno.git
synced 2025-08-03 10:33:54 +00:00
feat(core): streams (#12596)
This allows resources to be "streams" by implementing read/write/shutdown. These streams are implicit since their nature (read/write/duplex) isn't known until called, but we could easily add another method to explicitly tag resources as streams. `op_read/op_write/op_shutdown` are now builtin ops provided by `deno_core` Note: this current implementation is simple & straightforward but it results in an additional alloc per read/write call Closes #12556
This commit is contained in:
parent
1eae6c139e
commit
375ce63c63
18 changed files with 258 additions and 304 deletions
|
@ -73,24 +73,6 @@
|
|||
return core.opAsync("op_fetch_send", rid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} rid
|
||||
* @param {Uint8Array} body
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
function opFetchRequestWrite(rid, body) {
|
||||
return core.opAsync("op_fetch_request_write", rid, body);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} rid
|
||||
* @param {Uint8Array} body
|
||||
* @returns {Promise<number>}
|
||||
*/
|
||||
function opFetchResponseRead(rid, body) {
|
||||
return core.opAsync("op_fetch_response_read", rid, body);
|
||||
}
|
||||
|
||||
// A finalization registry to clean up underlying fetch resources that are GC'ed.
|
||||
const RESOURCE_REGISTRY = new FinalizationRegistry((rid) => {
|
||||
core.tryClose(rid);
|
||||
|
@ -120,7 +102,8 @@
|
|||
// This is the largest possible size for a single packet on a TLS
|
||||
// stream.
|
||||
const chunk = new Uint8Array(16 * 1024 + 256);
|
||||
const read = await opFetchResponseRead(
|
||||
// TODO(@AaronO): switch to handle nulls if that's moved to core
|
||||
const read = await core.read(
|
||||
responseBodyRid,
|
||||
chunk,
|
||||
);
|
||||
|
@ -260,7 +243,7 @@
|
|||
}
|
||||
try {
|
||||
await PromisePrototypeCatch(
|
||||
opFetchRequestWrite(requestBodyRid, value),
|
||||
core.write(requestBodyRid, value),
|
||||
(err) => {
|
||||
if (terminator.aborted) return;
|
||||
throw err;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue