2014-05-14 9 views
2

gevent-socketio의 django chat 예제와 비슷한 응용 프로그램을 만들었습니다. 그러나 sockets.py에 네임 스페이스 (클래스)를 추가하면 socketio 오류가 발생합니다 : 'no_such_namespace'.django에서 gevent-socketio의 다중 네임 스페이스

나는 내보기에

socketio_manage(request.environ, { '/chat': ChatNamespace ,'/other': OtherNamespace },request) 

을 추가해야합니다,하지만 나는 다음과 같은 KeyError를이 :

File "...socketio/__init__.py", line 67, in socketio_manage 
    socket = environ['socketio'] 
KeyError: 'socketio' 

답변

0

당신이 Gevent 위해서는 제대로해야 할 몇 가지 이상한 것이있다 장고와 함께 일하는 Socketio.

먼저해야 할 일은 Socketio 클라이언트 버전 0.9.6 (사용중인 버전의 소스 코드에서 밝혀야 함)을 사용하고 있는지 확인하는 것입니다. 이는 최신 버전의 Socketio 클라이언트가 Gevent Socketio가 인식하지 못하는 방식으로 GET 및 POST 요청을 형식화하고 서버가 정상적인 Django 요청이며 핸드 셰이크를 완료하지 않는다고 가정하기 때문입니다 (이것이 바로 환경에서 'socketio'키가 아님).

import socketio.sdjango 
socketio.sdjango.autodiscover() 

이 자동으로 (sockets.py에서) 어떤 네임 스페이스를 찾을 것이며,이를 등록 :

당신이해야하지만, 기술적으로 필요가 없습니다 두 번째 것은, 루트 URL의 conf이 추가입니다 , 또한 첫 번째 라인 처리됩니다 : 어떤 이유로 네임 스페이스가 자동으로 등록되지 않는 경우

socketio_manage(...) 

, 그것은 각 네임 스페이스에 네임 스페이스 장식을 추가하지 않은 수 있기 때문이다.

from socketio.sdjango import namespace 

@namespace('/chat') 
def ChatNamespace(...): 
    ... 

@namespace('/other') 
def OtherNamespace(...): 
    ... 

내가이 질문은 거의 두 살 것을 이해하지만, 최근이 같은 문제를 통해 일 : 귀하의 경우에, 단순히 당신의 코드는 다음과 일치하는지 확인합니다. 앞으로이 문제에 걸려 넘어지면 누구에게나이 대답을 생각해보십시오.