Почему в API веб-потоков отсутствует Duplex Stream?
Я знаком со «старым» потоком nodejs, поэтому необходимость в Duplex steam «потоки, которые доступны как для чтения, так и для записи (например, net.Socket)» кажутся совершенно очевидными.
Примеры дуплексных потоков включают:
- TCP-сокеты
- zlib-потоки
- криптопотоки
Когда я изучаю новые функции nodejs18 и обнаруживаю, что nodejs добавил API веб-потоков . Я был немного удивлен, увидев, что веб-потоки имеют только 3 типа пара , то есть в нем отсутствует дуплексный поток. Я заметил, что это потому, что https://streams.spec.whatwg.org/ определяет только 3 типа потоков. Но почему ? Разве не очевидна потребность в потоке как для чтения, так и для записи?
2 ответа
Дуплексный поток — это любой объект сreadable
имущество, которое являетсяReadableStream
, иwritable
имущество, которое являетсяWritableStream
. Поскольку в JavaScript легко создавать объекты с двумя свойствами (используйте синтаксис{ readable, writable }
), нет необходимости в классе или другом помощнике. Таким образом, стандарт не включает один.
Стандарт дает больше информации об этом в https://streams.spec.whatwg.org/#other-specs-duplex .
Я просто изучал это прямо сейчас, и да, нет эквивалентаDuplex
для веб-потоков, однако вы создаете свои собственные, делая что-то вроде этого:
class MyStream<R = any, W = any> implements ReadableWritablePair<R, W> {
public readable: ReadableStream<R>;
public writable: WritableStream<W>;
public constructor() {
this.readable = new ReadableStream();
this.writable = new WritableStream();
}
}
Затем реализуйте каждую сторону отдельно.