gpt4 book ai didi

javascript - 在浏览器中处理流式 JS 内容的最佳方式是什么?

转载 作者:行者123 更新时间:2023-11-30 13:20:38 25 4
gpt4 key购买 nike

假设我们有一个服务器端应用程序,它生成充满 JavaScript 命令的流媒体内容。对我来说展示示例应用程序的最简单方法是使用 Python/Flask,但是您可以使用任何语言来执行它,只需在每次迭代后刷新输出即可。因此,对于示例服务器端应用程序:

from time import sleep from flask import Response

@app.route('/stream', methods=['POST']) def stream():
def generate():
for i in range(10):
sleep(1)
yield 'console.log("Iteration: %d");\n' % i
return Response(generate(), mimetype='application/javascript')

返回(在 10 秒内有 1 秒停顿)这种输出:

console.log("Iteration: 0");
console.log("Iteration: 1");
console.log("Iteration: 2");
...
console.log("Iteration: 9");

我需要创建一个“父”HTML/JavaScript 页面,它可以即时处理和执行这些命令,即等到所有 10 次迭代都加载完毕。此外,它应该能够为上述服务器端应用程序提供 POST 请求。

以下是我尝试过的选项。

  1. 我用不同的选项测试了 jQuery Ajax 方法,但它仍然需要完整生成的输出来一次执行所有命令。
  2. 另一个想法是使用 iframe .它工作正常,但为了使用它 我需要改写 console.log("Iteration:
    0");
    的输出至 <script language="JavaScript">console.log("Iteration:
    0");</script>
    内容类型为 text/html;还要模拟POST 表单提交给目标iframe .
  3. 我已阅读有关 WebSocket 的内容。但是,由于这项技术不目前绝对支持,我的申请应该是现在已经可以处理即时内容了,我拒绝处理

另一件非常重要的事情:输出应该是一个流,因为服务器端应用程序需要一个持久的过程;所以制作setTimeout(function() { $.ajax(...); }, 1000);不是解决方案。

总而言之,我尝试了几个选项但很简单 iframe是目前唯一真正有效的解决方案。否则,很可能我遗漏了一些东西。非常感谢任何想法和建设性想法。

提前致谢!

最佳答案

long-Polling 和 comet 是选项,但这些都是 hack。您提到的 Iframe 方法并不糟糕,但如果您需要恢复连接,则会出现一些状态问题。

我鼓励您重新考虑网络套接字。有一个可爱的垫片available在 github 上,它使用 flash(现在已经有一段时间的套接字支持)作为后备。您可以像存在 Web 套接字一样编写客户端代码,填充程序会将其添加到不支持它的浏览器中。太棒了!

关于javascript - 在浏览器中处理流式 JS 内容的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10346149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com