我有一個程序與幾個變換幾個長管道。如何查詢NodeJS流'元數據'?
例如
socket.pipe(ta).pipe(tb).pipe(tc);
...
tc.pipe(other_socket);
向/從管道添加/讀取元數據的最佳方式是什麼?
例如:ta
將數據包累積並分解成行。 tb
需要在每行的前面添加基於始發IP地址(如果有的話)的數據。
tb
如何從其輸入中獲得remoteAddress
?
這裏似乎與原型遺傳有一些相似之處。即tb
應該詢問ta
(它缺乏財產),那麼ta
應該詢問socket
(它有屬性)。
我正在尋找從管道添加和讀取元數據的一般方法,因爲我有其他更復雜但相似的問題。
我目前正在通過使用由'meta
和屬性對象組成的'對象流'來解決此問題。每個轉換必須做到,大多數只留下meta
。這種解決方案很難看,尤其是因爲我必須創建一個看起來像net
的新模塊xnet
,但生成這些增強對象,而不是普通緩衝區或字符串。
(Haskellers可能會認識到這一點的解決方案作爲一個單子,在那裏我擡起大部分流的轉變我使用到「元」單子。我還在學習Haskell,所以這種觀察可能不正確。)
如果元數據是流水線執行的特定實例的只讀數據,那麼爲什麼不在創建單個管道時傳遞此數據。例如:'socket.pipe(new Ta(address))' – Ankur
就Haskell而言,它聽起來像是一個Reader moand,其中Pipeline執行函數需要一個Reader,它完全滿足管道中各個管道的所有元數據需求 – Ankur
@Ankur這是一個有趣的解決方案,但它讓我意識到,元數據確實需要每個'數據包'。當多個TCP連接將它們的數據合併到一個流水線中時,下游消費者只有在數據包中才能找到元數據。 (不同的數據包將來自不同的TCP連接。) – fadedbee