使用Javascript的HTTP正文流

HTTP Body Streaming with Javascript

本文关键字:正文 HTTP Javascript 使用      更新时间:2023-09-26

我正在编写一个调试/管理节点服务器,它允许用户在机器上执行长时间运行的进程。我想将子进程的输出流式传输到他们开始操作的形式。

我可以使用套接字来实现这一点,但我必须让客户端订阅一个通道,并且当消息只涉及一个客户端时,我必须向整个通道发布消息。

我更希望能够将http正文流式传输到客户端。使用node,我可以很容易地做到这一点:只需继续写入请求的套接字,完成后调用end。

有没有任何方法可以使用XhrHttpRequest来调用web服务,让它在新数据可用时触发事件,并在关闭时触发最终事件?是否可以使用jQuery?

请注意,这与普通实时更新的用例不同,套接字是一个不错的选择。这是一个单独的请求。我只想得到支离破碎的回应。

我所希望的是不可能的:你不能发出xhrhttp请求并保持它的打开状态,一次解析块。

以下是人们的建议摘要

  1. 无论如何都要使用socket.io,并更改您的体系结构以支持推送事件
  2. 使用socket.io,但通过它发出请求,就好像你在点击url一样。在socket.io的服务器端制作一个小的url路由器,并根据需要流式传输内容
  3. 保持初始html页面打开,并在进行解析时对其进行解析(对于我的实现来说不可行)
  4. (3) ,但在一个隐藏的iframe中

我选择了2。

作为这个问题的更新,现在,您可以使用Sever发送事件(SSE)。这样,您就不需要在服务器端做任何特别的事情,也不需要设置websocket,当您不需要全双工时,这就太过分了。XHR会将整个数据保存在内存中,这对于大文件来说并不理想。我也有同样的问题,我在这里回答了:

如何处理流式HTTP GET数据?

几年前,我在开放http响应上使用了"javascript"流。(ajax出现前几年)

这里的想法是:编写大块的

<script type="text/javascript">do js stuff here</script> 

对于您希望客户端对流程的每一步做出反应。

它可能仍然有效。