자바 스크립트 명령으로 가득 찬 스트리밍 콘텐츠를 생성하는 서버 측 응용 프로그램이 있다고 상상해보십시오. 필자에게 예제 애플리케이션을 보여주기위한 가장 쉬운 방법은 Python/Flask를 사용하는 것이지만, 각 반복 후에 출력을 플러시하는 언어를 사용하여 수행 할 수 있습니다. 따라서, 샘플 서버 측 응용 프로그램 :브라우저에서 스트리밍 JS 콘텐츠를 처리하는 가장 좋은 방법은 무엇입니까?
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')
출력의 종류 (1 초 일시 정지 10 초간) 반환
console.log("Iteration: 0");
console.log("Iteration: 1");
console.log("Iteration: 2");
...
console.log("Iteration: 9");
나는 "부모"HTML/자바 스크립트를 작성해야 이 명령을 즉각적으로 처리하고 실행하는 페이지, 즉 이 아니며 모든 반복이로드 될 때까지 대기합니다 (). 또한 서버 측 응용 프로그램에 대한 POST 요청을 처리 할 수 있어야합니다.
다음은 내가 시도한 옵션입니다.
- 나는 다른 옵션 jQuery를 아약스 방법을 테스트하지만 여전히 요구는 전체 한 번에 모든 명령을 실행할 수있는 출력을 생성합니다.
- 다른 아이디어는
iframe
입니다. 그것은 잘 작동하지만 위해서는 내 출력을console.log("Iteration: 0");
에서<script language="JavaScript">console.log("Iteration: 0");</script>
텍스트/html과 콘텐츠를 바꿔야 할 필요가 그것을 사용하려면, 그리고iframe
에 POST 양식 제출을 시뮬레이션 할 수도 있습니다. - 웹 소켓에 대해 읽었습니다. 그러나이 기술은 현재로서는 절대적으로 지원되는 이 아니므로 은 즉시 콘텐츠에서 작동 할 수 있어야하므로 을 처리하지 않았습니다.
또 다른 매우 중요한 것은 : 서버 측 응용 프로그램이 오래 지속되는 과정에서 작동하기 때문에 출력, 스트림해야한다; 그래서 setTimeout(function() { $.ajax(...); }, 1000);
은 해결책이 아닙니다.
요약하면 몇 가지 옵션을 시도했지만 단순한 iframe
은 현재 실제로 작동하는 유일한 솔루션입니다. 그렇지 않으면, 아마 나는 뭔가를 놓치고 있습니다. 모든 생각과 건설적인 아이디어는 대단히 감사하게 생각합니다.
미리 감사드립니다.
나는 이것이 가능할 지 확신하지 못하지만, 그렇다고 확신 할 수는 없다. 웹 소켓이있는 푸시 서버를 사용해야하는 것 같습니다. 이전 브라우저를 지원해야한다면 폴백 자바 스크립트를 대체 ... – Endophage
Comet이 도움이 될 수 있습니까? http://en.wikipedia.org/wiki/Comet_(programming) – rt2800
가능한 중복 : http : // stackoverflow.com/questions/7213549/long-polling-http-streaming-general-questions – Bergi