我必须从一个API端点向另一个端点发送大量数据 - 可能是5MB甚至高达10MB。 我应该把它分成更小的块吗? 或者我应该使用某种JSON流技术吗?
非常感谢任何见解。
答案 0 :(得分:1)
nodejs netsockets已经是流。如果你把太多东西放进去,直到另一端读到它们,它们就会阻塞。
假设您通过API端点谈论http(或https或http2),这些都是建立在netsockets之上的。
response.write
小块(我认为缓冲区大小默认为16KB,在此之下),直到false
返回(意味着你已经填满)并听取{ {1}}事件让它再次自由,你可以继续写。完成后致电'drain'
答案 1 :(得分:1)
我可以想到两件可能对你有用的事情,它们都涉及streams。你应该手动将字符串分解为16k块(或使用像chunking-streams(https://github.com/Olegas/node-chunking-streams/tree/master/lib这样的东西)为你做这个)
现在有两种方法:
使用pull-stream,它可以通过stream-to-pull-stream(https://github.com/dominictarr/stream-to-pull-stream)位于常规node.js流之上。这将阻止接收方再次阅读(如kafka主题),直到需要更多。
使用mux-demux。它有一个非常整洁的内置'暂停'机制,如果接收方的缓冲区已满,它将告诉'发送方停止发送更多数据,直到缓冲区有更多空间。
然后,您只需追加流中的所有数据,直到流发送结束'事件,意味着没有更多数据可供使用。