2013-02-03 2 views
0

호스트 A에서 실행중인 웹 응용 프로그램이 있고 다른 호스트 B에서 몇 가지 명령을 실행하고 A에있는 웹 페이지에서 B에서 실행중인 명령의 출력을 표시하려고합니다 즉, 나는 A에있는 웹 페이지에서 B 콘솔의 라이브 스트리밍을 만들고 싶다.Ajac 통화 차단 - Web2py 프레임 워크

내가 한 것은 B 콘솔의 출력을 A의 소켓으로 리다이렉트하여 출력을 파일에 저장했다는 것이다. A.

나는 (web2py 컨트롤러를 사용하여) B에서 시작하는 프로세스를 시작하는 ajax 호출을 시작합니다.이 ajax 호출은 B 콘솔의 A 소켓으로의 재 지정도 처리합니다.

웹 페이지에서 소켓의 데이터가 저장되어있는 파일을 읽는 또 다른 아약스가 발생합니다.

이제 내가 직면 한 문제는 두 번째 아약스 호출을 실행하면 첫 번째 아약스 호출이 반환 될 때까지 웹 페이지로 돌아 오지 않는다는 것입니다.

나는 이것이 올바른 방법임을 알고 싶습니다. 또한 내가 알고있는, 내가 직면하고있는 문제는 아약스 또는 web2py 프레임 워크 때문인가요?

+0

이 질문은 너무 애매합니다. 무엇을 시도해 봤습니까? 시스템 양면에서 어떤 일이 벌어지고 있는지, 그리고 문제가 발생하고 있다고 생각되는 부분을 알려주십시오. –

답변

2

기본적으로 각 요청에 따라 세션 파일이 잠기므로 이전 요청이 완료되고 세션 파일이 잠금 해제 될 때까지 동일한 클라이언트의 새 요청이 차단됩니다 (here 참조). 이 문제를 방지하려면 다음 중 하나를 수행 할 수 있습니다 : 아약스 기능에 대한 요청이 들어 오면

앱 코드에서
  • , 즉시 session.forget(response)를 호출합니다. 이렇게하면 세션 파일의 잠금이 해제되어 해당 요청에 대해 세션이 저장되지 않습니다. 당신은 아약스 함수 자체의 시작 부분에 다음 행을 포함 할 수 있습니다, 또는 당신은 이전 모델 파일에 포함 할 수 있습니다, 데이터베이스 또는 쿠키

    if request.function in [list, of, ajax, functions]: 
        session.forget(response) 
    
  • 스토어 세션이 경우에는 세션이 없을 것 잠글 파일

  • 매개 변수 기반 다시 쓰기 시스템을 사용하지 않는 경우 패턴 기반 다시 쓰기 시스템을 사용하여 특정 경로에 대한 자동 세션 연결을 비활성화 할 수 있습니다. routes_in에서 표준 2-tuple을 지정하는 대신 3-tuple을 지정할 수 있습니다. 튜플의 처음 두 요소는 보통 (들어오는 패턴과 다시 쓰인 패턴)이고 세 번째 요소는 dict(web2py_disable_session=True)이어야합니다. 그러면 프레임 워크가 해당 경로의 세션을 자동으로 연결하지 못하게됩니다 (앱 코드에서 세션을 수동으로 연결할 수 있음). 이론적으로 이것은 세션 파일이 전혀 잠겨지지 않도록하기 때문에 첫 번째 옵션보다 약간 효율적입니다 (첫 번째 옵션은 프레임 워크가 세션 파일을 처음에 잠근 다음 응용 프로그램 코드가 조금 나중에 잠금을 해제 함) .