2016-02-03 35 views
1

我使用child_process.spawn從nodejs腳本調用C++程序。 C++程序使用std :: cout將數據傳回到nodejs腳本。通常,這個程序管道返回的JSON長度超過4096字節。我的節點腳本(或C++程序?)會將此JSON分成多個4096字節的塊,以便爲單個響應多次調用child.stdout.on('data')。如何從4096字節的子進程拆分管道?

是否有增加此塊大小或有孩子的過程告訴我,更多的數據被料到的方式?

回答

1

圍繞這類問題最簡單的方法是隻使用某種分隔符。在JSON的情況下,許多人只使用換行符分隔的JSON。因此,在您的C++程序中的JSON字符串之後附加\n,然後在節點程序中保持緩衝,直到看到\n。在那裏分割,然後開始緩衝下一條消息。

+0

這種方法的問題是,我有被emited以及一個進度條。基本上我有一個for循環,它將值附加到JSON數組並輸出進度報告。我可以將值存儲在C++向量中,然後在最後循環,但從cpu和ram的角度來看,這是低效的。 – user9403

+0

在這種情況下,只需爲進度數據使用不同的文件描述符或在不同的文件描述符上發出JSON。你可以使用stderr或全新的fd。節點可以指定自己的自定義stdio fds,然後從C++端開始寫入該fd。 curl做這樣的事情,他們在stderr上顯示進度數據,而在stdout上顯示實際數據。 – mscdex