2012-12-17 5 views
0

요청을 사용하여 브라우저로 작동하는 작은 응용 프로그램을 만들었습니다. 세션을 처리하고 CSRF 토큰을 장고에 제대로 전달하는 라이브러리의 기능을 사용합니다.Django는 이벤트를 기반으로 클라이언트에 계속 데이터를 전송합니다.

인증 및 세션을 처리해야하는이 여러 가지 응용 프로그램이 서버에 연결되며 완료됩니다.

클라이언트가 장고 서버 측에 영구적으로 연결되어 있어야합니다. 클라이언트를 닫거나 연결을 끊을 때 세션 만료 만 설정하면이 클라이언트를 처리 할 수 ​​있다고 생각합니다.

내가하고 싶은 또 다른 일은 장고가 인증 된 클라이언트와 로그인 된 클라이언트를 사용하여 서버의 일부 이벤트를 기반으로 데이터를 보내는 것을 시작하는 것입니다. 어떻게해야합니까?

서버에서 이벤트를 처리하고 이에 따라 메시지/데이터를 클라이언트에 보내는 기능은보기 기능이 아니며 여기서 return HttpResponse을 사용할 수 있습니다. HttpResponse는 반복되는 일부 이벤트가 아닌 요청마다 한 번만 응답을 보낼 수 있기 때문에 여러 응답을 보낼 수 있습니다.

+1

Django는 그러한 작업을 위해 설계되지 않았습니다. Tornado와 같은 이벤트 기반 웹 서버 구현을 시도하십시오. –

+0

감사합니다. Alex, 나는 이벤트 기반 웹 서버에 대한 연구를 해보겠습니다. – securecurve

답변

1

불가능한 메모리 요구 사항없이 장고에이 작업을 수행하려면 엄청난 노력이 필요하며, 그래도 여전히 가치있는 것보다 더 어려울 것이므로 대신 몇 가지 대안을 제시 할 것입니다.

django-socketio이 원하는 것을 수행하는 데 도움이 될지도 모르겠지만 꽤 오래된 것 같습니다.

마지막으로 django 앱에서 실시간 이벤트를 클라이언트로 보내야 할 때 rabbitmq 서버를 사용하여 토네이도를 사용하여 작성한 매우 얇은 서버에 연결된 대기열에 메시지의 패킷을 전달하고 기본 long - 접근 방법. 그게 효과가 있었지만, 대부분 유지 보수가 불가능한 움직이는 부분이 많은 복잡한 시스템이었습니다.

최근에 이벤트를 클라이언트에 푸시해야하는 경우 node.js + socket.io를 사용했는데 작업하기가 훨씬 쉽습니다 (적어도 전체 라우팅을 사용하지 않는 경우 토끼의 힘, 나는 그렇지 않다.

django와 함께이 설정을 사용하려면 django를 제공하면서도 별도의 node.js 서버를 실행하고 전체 스택 앞에 HAproxy를 넣는다. 도메인 간 문제를 피하십시오. 남은 유일한 문제는 노드 포트와 django 앱 사이에 연결하는 방법입니다 (개인 포트에서 HTTP 호출, redis pub/sub 설정, 토끼 또는 zeromq와 같은 종류의 메시징 설정, 또는 당신이 꿈꾸는 다른 것.

+0

고맙습니다. JeffS. 당신의 대답을 읽은 후에, 나는 Node.js (내 프로젝트에 불필요한 복잡성을 추가 할 것입니다)를 사용하지 않고 django와 같은 구현을하는 가장 간단한 방법을 사용하여 클라이언트 측에서 일부 메시징 라이브러리를 사용하면서 rabbitmq 또는 유사한 것을 사용하는 것이라고 결론을 내릴 수 있습니다 예를 들어 pymq와 같습니다. 당신의 대답에서 정말로 이해할 수없는 것은 왜 클라이언트 쪽에서 토네이도를 사용 하는가입니다. 왜냐하면 클라이언트 메시지 대기열만을 사용하여 메시지를 처리하는 문제에 직면했기 때문입니까, 아니면 다른 것을 의미합니까? – securecurve

+1

우리의 상황에서는 클라이언트가 토끼에 직접 연결할 수없는 웹 브라우저 여야 했으므로 우리가 한 것은 토네이도 + 폭풍에 작은 (<100 줄의 파이썬) 서버를 쓰는 것입니다. 기본적으로 HTTP Long 폴링과 토끼. – JeffS

+0

나는 당신의 요점을보고, 일들이 나에게 지금 분명하다. 몇 가지 조사를하고 내 질문을이 SO 스레드에 전달합니다. Thanks again again :)) – securecurve

관련 문제