2011-01-05 3 views
0

안녕하세요, 여러분. App Engine 채널 API (문서 번호 here)를 사용하여 애플리케이션에 푸시 업데이트를 사용하도록 설정하려고합니다. 그러나 통신 채널을 초기화하는 메커니즘을 설정하는 데 몇 가지 문제가 있습니다.Google App Engine 채널 API (Python/Django) 관련 문제

문제는 페이지를로드 할 때 onError 및 onClose 처리기에 대한 디버그 인쇄물을 얻지 만 onOpen 처리기에 대한 디버그 인쇄물을 얻지 못하는 것입니다. 다른 일은 일어나지 않습니다. 아래는 Google 크롬 개발자 도구를 사용하는 자바 스크립트 콘솔 출력입니다.

리소스는 스크립트로 해석되지만 MIME 유형 text/html로 전송됩니다. ..... JSAPI : -1

의 OnError가 ..... 443,088 : 88

으로 onClose가 ..... 443,088 : 여기 80

과는 관련 부분 (대부분입니다) 내 장고 템플릿에서 자바 스크립트 코드 : 나는 상황을 제대로 이해한다면으로 onOpen가 아직 호출 할 나타나지 않기 때문에

<script type="text/javascript"> 
onOpen = function() { 
    console.debug('onOpen'); 

    var xhrArgs = { 
     url: '/channel/connect/', 
     headers: { 'Content-Type': 'application/json' }, 
     postData: dojo.toJson({ 'channel_token': '{{ channel_token }}' }), 
     handleAs: 'text', 
     load: function(response) { 
     alert('success'); 
     }, 
     error: function(error) { 
     alert('failure: ' + error); 
     } 
    }; 
    var deferred = dojo.xhrPost(xhrArgs); 
}; 

onClose = function() { 
    console.debug('onClose'); 
}; 

onMessage = function(msg) { 
    console.debug('onMessage'); 
}; 

onError = function() { 
    console.debug('onError'); 
}; 

openChannel = function() { 
    var channel = new goog.appengine.Channel('{{ channel_token }}'); 
    var handler = { 
    'onopen': onOpen, 
    'onclose': onClose, 
    'onmessage': onMessage, 
    'onerror': onError 
    }; 
    var socket = channel.open(handler); 
    socket.onopen = onOpen; 
    socket.onmessage = onMessage; 
}; 

setTimeout(openChannel, 100); 
</script> 

는, 서버 측 코드는,이 시점에서 관련이 없습니다. 나는 내가 간단한 것을 놓치고 있어야한다는 것을 알고있다. 그러나 누군가가 이것으로 도울 수 있다면, 나는 그것을 크게 고맙게 생각할 것이다.

답변

5

unitialized 채널 토큰을 사용하고있는 것처럼 보입니다. 서버는이 클라이언트에 대한 토큰을 검색하기 위해 channel.create_channel을 호출해야하며,이 토큰을 Channel 객체의 생성자에 전달합니다.

+0

감사합니다. –