Я пытаюсь реализовать поток с новым 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'), я бы назвал ее напрямую с копией кольцевого буфера.