Я пытаюсь реализовать поток с новым Node.js потоком API, который будет буферизовать определенный объем данных. Когда этот поток передается по каналу в другой поток или если что-то потребляет события readable
, этот поток должен очищать свой буфер, а затем просто переходить через проход. Ловушка состоит в том, что этот поток будет передан по каналам во многие другие потоки, и когда каждый целевой поток будет подключен, буфер должен быть сброшен, даже если он уже сброшен в другой поток.
Например:
-
BufferStream
реализуетstream.Transform
и сохраняет внутренний кольцевой буфер 512 КБ. -
ReadableStreamA
передается по каналу в экземплярBufferStream
-
BufferStream
записывает в свой кольцевой буфер, считывая данные изReadableStreamA
по мере его поступления. (Не имеет значения, потеряны ли данные, поскольку буфер перезаписывает старые данные.) -
BufferStream
подается наWritableStreamB
-
WritableStreamB
получает весь буфер 512 Кбайт и продолжает получать данные, поскольку он написан отReadableStreamA
доBufferStream
. -
BufferStream
подается наWritableStreamC
-
WritableStreamC
также получает весь буфер 512 Кбайт, но этот буфер теперь отличается от того, что получилWritableStreamB
, поскольку с тех пор больше данных было записано вBufferStream
.
Возможно ли это с помощью API потоков? Единственный метод, о котором я могу думать, - создать объект с помощью метода, который запустит новый поток PassThrough для каждого пункта назначения, то есть я не мог бы просто подключиться к нему и из него.
Для чего это стоит, я сделал это со старым "текущим" API, просто слушая новые обработчики событий data
. Когда новая функция была присоединена с помощью .on('data')
, я бы назвал ее напрямую с копией кольцевого буфера.