如何使用> 5MB的JSON数据从一个nodejs API端点处理POST请求到另一个?

时间:2016-02-17 15:43:22

标签: json node.js http post

我必须从一个API端点向另一个端点发送大量数据 - 可能是5MB甚至高达10MB。 我应该把它分成更小的块吗? 或者我应该使用某种JSON流技术吗?

非常感谢任何见解。

2 个答案:

答案 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。它有一个非常整洁的内置'暂停'机制,如果接收方的缓冲区已满,它将告诉'发送方停止发送更多数据,直到缓冲区有更多空间。

然后,您只需追加流中的所有数据,直到流发送结束'事件,意味着没有更多数据可供使用。