0

웹 소켓을 사용하여 업데이트를 스트리밍하는 간단한 웹 게임을 만들고 있습니다. 다른 모든 것들 (예 : 로그인 시스템, 사용자 프로필, & c)에 대한 HTTP AJAX 요청입니다. 불행히도 저는 mod_python에 다소 익숙하지 만, Sessions 클래스를 사용하여 방문자를 추적하고 싶습니다. 유일한 문제는 어떤 이유로 Session이 mod_python 요청을 요구한다는 것이다. mod_pywebsocket 핸들러에서 이러한 세션을 사용할 수있는 방법이 있습니까? 아니면 자체 세션 메커니즘을 롤백해야합니까?mod_pyweb 세션에서 mod_python의 세션을 사용할 수 있습니까?

+1

더 이상 개발중인 ** mod_python ** 대신 [** mod_wsgi **] (http://code.google.com/p/modwsgi/)를 사용해야합니다. –

+0

문제는 pywebsocket이 파이썬에서 가장 널리 사용되는 아파치 기반 웹 소켓 구현 인 것처럼 보이고 약간 오래된 것이기 때문에 mod_python을 사용한다는 것입니다. 나의 이해는 웹 소켓이 포트 80을 사용한다는 것인데, 이는 HTTP와 소켓이 같은 서버에서 작동하기를 원한다면 아파치에 묶어야한다는 것을 의미한다. WSGI와 mod_python이 잘 작동하는지 잘 모르겠습니다. – Troy

답변

0

누구나 사용할 수있는 경우 mod_python의 세션이 mod_pywebsocket과 잘 작동한다는 것을 알았습니다. 다음과 같은 두 가지 사항을 고려해야합니다.

초기화 일반적으로 mod_python 요청으로 mod_python Session 객체를 생성합니다. 다행히도, mod_pywebsocket의 저자는 web 소켓 요청 (web_socket_transfer_data 인수에서 얻은 것)을 호환 가능하게 만들려는 노력이있었습니다. 즉, mod_python에서와 같은 방식으로 세션을 인스턴스화 할 수 있습니다 (예제는 the docs 참조). 이것은 명백해 보일지 모르지만 그것은 내 것이 아니 었습니다. 이 작업을 수행하는 중에 오류가 발생하면 다른 작업을 잘못 수행 한 것입니다.

세션 잠금 명심해야 할 것은 주어진 ID와 연결된 세션이 기본적으로 잠겨 있으며 해당 세션 개체의 수명 동안 잠금이 유지된다는 것입니다. 즉, 동일한 호스트의 세션을 사용하는 두 개의 웹 소켓이있는 경우 그 중 하나는 영원히 차단 될 위험이 있습니다. 또한 설명서에는 이러한 뮤텍스 잠금이 중요하지 않은 시스템 리소스가 필요할 수 있다고 명시되어 있습니다. 이들은 빠른 HTTP 요청을 제공하기 위해 명확하게 고안된 것이지 지속적인 연결 지향적 인 용도로는 적합하지 않습니다.

세션을 수정하는 한 가지 방법은 잠금을 해제하는 것입니다.하지만 그렇게하는 것이 현명한 방법은 아닙니다. 나는 그것을 시도하지는 않았지만, 당신이 시도한다면 그 경쟁 조건들과 함께 행운을 빈다. 내가 한 일은 단시간 동안 필요한 세션을 만든 다음 완료되면 None을 할당하는 것이 었습니다. 분명히 with 절은이 세션에서 작동하지 않습니다. 다시 말하지만, 이것은 끔찍하게 애매한 것은 아니지만, 두려운 상황에서 무슨 일이 벌어지는 지 깨닫지 못하면 두통을 일으킬 수 있습니다.