繁体   English   中英

如何编写一个中间层 http API 端点,当它们到达客户端时可以 stream 结果?

[英]How to write a middle-tier http API endpoint that can stream results as they arrive to the client?

场景是这样的——我有一个前端 web 服务器,我在 node.js 中编写。我有一个尚未编写的中间层内部 API 层,用任何东西编写。 内部 API 是唯一允许与数据存储(恰好是关系数据库)对话的东西。

免责声明:我是 node.js 初学者。

node.js 想要异步进行数据访问 - 这使得像 Database.query.all 这样的调用效率低下,因为在整个列表组装完成之前响应回调不会启动。 我读过的文档建议相反,一次将 stream 结果发送给客户会更好。

我想知道如何编写前端和中间层 http 内部 API,以便我可以在这里利用 node.js 的异步性。

我想问题是“我如何通过 http 访问 stream 结构化数据”? 我想这就是我要求支持的内部 API 的功能。

我是不是该:

  • 让前端请求一个 ID 列表,然后向后端分别发出一个请求? 听起来很粗鲁和喋喋不休,而且我看不到请求会按我想要的顺序返回的保证,所以我不得不等到我把所有东西都放回前端......?
  • 让前端针对数据页面的内部 API 发出一系列请求,并将每个块视为一个流段......?
  • 只为第一个屏幕的价值获取足够的数据,然后请求后续的块,在它到达时将每个块写入列表的末尾?
  • 更聪明的东西??

(注意:请不要说“摆脱中间层,这样你就可以直接与数据库对话”——那不是一个选择)

我不确定“流媒体”到底是什么意思; 从你给出的想法来看,它可以被解释为一些HTTP 服务器推送或长轮询技术,或者只是发出后续的 XHR 请求。

由于您使用的是节点,我推荐Socket.io ,它允许您真正将数据推送到浏览器,只要你想

如果您选择使用 XHR 的 go,只需告诉浏览器下一步要请求什么。

如果这不适合你,并且你想使用服务器推送或长轮询, response.write()似乎是 go 的方式。但是你可能会遇到请求超时等问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM