2012-05-08 1 views
2

내보기의 첫 번째 줄에 sleep(30)을 추가하려고했습니다. 그 후이 페이지를 두 개의 브라우저 탭에 열었습니다. 첫 번째 탭은 30 초 후에 페이지를로드하고 두 번째 탭은 60 초 후에 페이지를로드합니다. 그동안 나는 다른 PC에서 페이지를 열 수있었습니다. 따라서 Django는 동일한 클라이언트의 동시 요청을 차단합니다.Django가 같은 세션 내에서 동시 요청을 차단하는 이유는 무엇입니까?

이것은 내 앱에 매우 적합합니다. 앞으로도 내 사이트가 이러한 방식으로 작동 할 수 있도록 노력하겠습니다. 그러나 나는 그러한 장고 행위를 묘사하는 문서 나 기사를 찾지 못했습니다. 따라서 이것이 기능인지 또는 운이 좋은지 아직 확실하지 않습니다. 누군가가 어떻게 그리고 왜 이것이 효과가 있는지 설명해 주시겠습니까?

실제로 필요한 것은보기가 처리되는 동안 세션을 차단하는 것입니다. 물론 일부 플래그 또는 db 트랜잭션을 사용할 수 있습니다. 하지만 장고에서 이미 구현 된 기능을 추가하고 싶지 않습니다.

파이썬 2.6.5, django 1.4, 우분투 서버, nginx 및 uwsgi를 사용합니다. postgresql과 sqlite를 모두 시도했습니다.

내 uwsgi 설정 :

<uwsgi> 
    <pythonpath>/home/admin/app/src</pythonpath> 
    <app mountpoint="/"> 
     <script>deploy.wsgi</script> 
    </app> 
    <workers>4</workers><!-- Not sure this is needed --> 
    <processes>2</processes> 
</uwsgi> 

또한의 runserver 명령과 같은 효과를 얻었다.

+1

실제로 실행중인 서버는 무엇입니까 (우분투는 서버 자체가 아닌 운영 체제입니다). Apache는 무엇입니까? 구니 코른? django 서버 (즉, python manage.py runserver)를 사용하고 있습니까? –

+1

죄송합니다, 나는 서버에 대해 잊어 버렸습니다 :) 단지 서버 세부 정보로 질문을 업데이트했습니다. – raacer

+0

일부 브라우저 기반 개발자 도구 (예 : chrome dev 도구 : 네트워크)를 사용하여 대기 시간이로드 시간을 지연시키는 지 확인 했습니까? – Priyeshj

답변

1

사실 Django는 동시 요청을 차단하지 않습니다.

동일한 세션에서 두 번째 브라우저 (예 : chrome 및 firefox)를 실행하는 경우 (첫 번째 브라우저에서 두 번째 브라우저로 sessionid 쿠키를 복사하여) 차단이 발생하지 않습니다. 그래서, 이것은 브라우저 기능이며 장고와는 아무 관련이 없습니다. 즉, 코드를 안전하게 만들려면 여전히 차단 기능을 일부 추가해야합니다.

관련 문제