2012-04-27 4 views
1

자바 스크립트 명령으로 가득 찬 스트리밍 콘텐츠를 생성하는 서버 측 응용 프로그램이 있다고 상상해보십시오. 필자에게 예제 애플리케이션을 보여주기위한 가장 쉬운 방법은 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 요청을 처리 할 수 ​​있어야합니다.

다음은 내가 시도한 옵션입니다.

  1. 나는 다른 옵션 jQuery를 아약스 방법을 테스트하지만 여전히 요구는 전체 한 번에 모든 명령을 실행할 수있는 출력을 생성합니다.
  2. 다른 아이디어는 iframe입니다. 그것은 잘 작동하지만 위해서는 내 출력을 console.log("Iteration: 0");에서 <script language="JavaScript">console.log("Iteration: 0");</script>텍스트/html과 콘텐츠를 바꿔야 할 필요가 그것을 사용하려면, 그리고 iframe에 POST 양식 제출을 시뮬레이션 할 수도 있습니다.
  3. 웹 소켓에 대해 읽었습니다. 그러나이 기술은 현재로서는 절대적으로 지원되는 이 아니므로 은 즉시 콘텐츠에서 작동 할 수 있어야하므로 을 처리하지 않았습니다.

또 다른 매우 중요한 것은 : 서버 측 응용 프로그램이 오래 지속되는 과정에서 작동하기 때문에 출력, 스트림해야한다; 그래서 setTimeout(function() { $.ajax(...); }, 1000);은 해결책이 아닙니다.

요약하면 몇 가지 옵션을 시도했지만 단순한 iframe은 현재 실제로 작동하는 유일한 솔루션입니다. 그렇지 않으면, 아마 나는 뭔가를 놓치고 있습니다. 모든 생각과 건설적인 아이디어는 대단히 감사하게 생각합니다.

미리 감사드립니다.

+0

나는 이것이 가능할 지 확신하지 못하지만, 그렇다고 확신 할 수는 없다. 웹 소켓이있는 푸시 서버를 사용해야하는 것 같습니다. 이전 브라우저를 지원해야한다면 폴백 자바 스크립트를 대체 ... – Endophage

+3

Comet이 도움이 될 수 있습니까? http://en.wikipedia.org/wiki/Comet_(programming) – rt2800

+0

가능한 중복 : http : // stackoverflow.com/questions/7213549/long-polling-http-streaming-general-questions – Bergi

답변

3

긴 폴링과 혜성은 옵션이지만 해킹입니다. 언급 한 Iframe 메소드는 끔찍한 것이 아니지만 연결을 복구해야하는 경우 몇 가지 상태 문제가 있습니다.

웹 소켓을 다시 생각해 보시기 바랍니다. 뒤쪽으로 플래시 (지금은 얼마 동안 소켓 지원을 해왔다)를 사용하는 github에 lovely shim available이 있습니다. 마치 웹 소켓이있는 것처럼 클라이언트 측 코드를 작성할 수 있으며 shim은이를 지원하지 않는 브라우저에 추가합니다. 큰!

+0

좋은 생각, 고마워! 나는 내 맥락에서 Flash/WebSocket을 확실히 테스트 할 것이다. – VisioN