Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浏览器中处理流式JS内容的最佳方式是什么?_Javascript_Jquery_Html_Server Side_Http Streaming - Fatal编程技术网

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

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():

想象一下,我们有一个服务器端应用程序,它生成充满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页面,该页面可以动态处理和执行这些命令,也就是说,not等待所有10次迭代加载。此外,它还应该能够为上述服务器端应用程序提供POST请求

以下是我尝试过的选项

  • 我用不同的选项测试了jQueryAjax方法,但它仍然有效 需要完整生成的输出以一次执行所有命令
  • 另一个想法是使用
    iframe
    。它工作正常,但为了 使用它我需要从
    console.log(“迭代:
    0");
    console.log(“迭代:
    0");内容类型为text/html;并进行模拟
    将表单提交发布到目标
    iframe
  • 我读过关于WebSocket的文章。但是,由于这项技术不是 目前绝对支持,我的申请应该 现在已经能够处理即时内容了,我拒绝处理 用它
  • 另一件非常重要的事情是,输出应该是一个流,因为服务器端应用程序使用的是一个持久的进程;因此,让
    setTimeout(function(){$.ajax(…);},1000)不是解决方案

    总而言之,我尝试了几个选项,但simple
    iframe
    是目前唯一有效的解决方案。否则,很可能我错过了什么。非常感谢您的任何想法和建设性意见


    提前谢谢你

    长轮询和comet是选项,但这些都是黑客攻击。您提到的Iframe方法并不糟糕,但是如果需要恢复连接,它会出现一些状态问题


    我鼓励您重新考虑web套接字。github上有一个可爱的垫片,它使用flash(它已经有一段时间的套接字支持)作为后备。您可以像编写web套接字一样编写客户端代码,而垫片会将其添加到不支持它的浏览器中。太好了

    我甚至不确定这是否可行,如果可行,肯定是不可取的。听起来您真的应该使用带有web套接字的推送服务器。如果您必须支持较旧的浏览器,那么轮询javascript作为备用…Comet可以帮助您吗?可能重复:@Bergi,不是真的。这个问题中被接受的答案并没有真正说服我,因为可能与上一个节点回复有所不同(可能有一些新的插件被发明来自动化XHR或
    iframe
    控制)。此外,我不同意
    iframe
    是一个缺点,除了错误处理问题,这是唯一一种在所有浏览器中都能正确工作的“技术”。好主意,谢谢!我肯定会在我的上下文中测试Flash/WebSocket。