Javascript 在浏览器中处理流式JS内容的最佳方式是什么?
想象一下,我们有一个服务器端应用程序,它生成充满JavaScript命令的流式内容。对我来说,演示示例应用程序最简单的方法是使用Python/Flask,但是您可以使用任何语言执行它,只需在每次迭代后刷新输出即可。因此,对于示例服务器端应用程序:Javascript 在浏览器中处理流式JS内容的最佳方式是什么?,javascript,jquery,html,server-side,http-streaming,Javascript,Jquery,Html,Server Side,Http Streaming,想象一下,我们有一个服务器端应用程序,它生成充满JavaScript命令的流式内容。对我来说,演示示例应用程序最简单的方法是使用Python/Flask,但是您可以使用任何语言执行它,只需在每次迭代后刷新输出即可。因此,对于示例服务器端应用程序: from time import sleep from flask import Response @app.route('/stream', methods=['POST']) def stream(): def generate():
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页面,该页面可以动态处理和执行这些命令,也就是说,not等待所有10次迭代加载。此外,它还应该能够为上述服务器端应用程序提供POST请求
以下是我尝试过的选项
iframe
。它工作正常,但为了
使用它我需要从console.log(“迭代:
0");代码>到console.log(“迭代:
0");代码>内容类型为text/html;并进行模拟
将表单提交发布到目标iframe
setTimeout(function(){$.ajax(…);},1000)代码>不是解决方案
总而言之,我尝试了几个选项,但simpleiframe
是目前唯一有效的解决方案。否则,很可能我错过了什么。非常感谢您的任何想法和建设性意见
提前谢谢你 长轮询和comet是选项,但这些都是黑客攻击。您提到的Iframe方法并不糟糕,但是如果需要恢复连接,它会出现一些状态问题
我鼓励您重新考虑web套接字。github上有一个可爱的垫片,它使用flash(它已经有一段时间的套接字支持)作为后备。您可以像编写web套接字一样编写客户端代码,而垫片会将其添加到不支持它的浏览器中。太好了 我甚至不确定这是否可行,如果可行,肯定是不可取的。听起来您真的应该使用带有web套接字的推送服务器。如果您必须支持较旧的浏览器,那么轮询javascript作为备用…Comet可以帮助您吗?可能重复:@Bergi,不是真的。这个问题中被接受的答案并没有真正说服我,因为可能与上一个节点回复有所不同(可能有一些新的插件被发明来自动化XHR或iframe
控制)。此外,我不同意iframe
是一个缺点,除了错误处理问题,这是唯一一种在所有浏览器中都能正确工作的“技术”。好主意,谢谢!我肯定会在我的上下文中测试Flash/WebSocket。