2014-08-27 1 views
0

내 클라이언트의 업데이트 폴링을 피하기 위해 App Engine Channel API을 사용하려고합니다. 문제는 소켓을 시작한 후 Chrome 콘솔에서 XHR 패킷이 계속 전송된다는 것입니다. 그들 모두는 다음과 같이 말합니다 :왜 앱 엔진 채널 API를 사용할 때 XHR 폴링이 많이 발생합니까?

XHR finished loading: GET "http://localhost:8080/_ah/channel/devcommand=poll&channel=xxxOMITTEDxxx-channel-yyyOMITTEDyyy-zzzOMITTEDzzz-1&client=1". jsapi:5406goog.net.XhrIo.send jsapi:5406goog.net.XhrIo.send jsapi:5352goog.appengine.DevSocket.poll_ 

서버가 메시지를 보내려고 시도 할 때까지 어떤 XHR 메시지도 기대하지 않습니다. 나는 Python dev_appserver를 사용하고있다.

아마 내가 자바 스크립트에서 뭔가 잘못하고 있습니다. 서버에서 토큰을 성공적으로 요청하고 있습니다. 내 클라이언트가 토큰을 수신 할 때,이 같은 소켓을 시작합니다

function listen_to_channel(msg) { 
    console.log('--- server response to channel request: ' + JSON.stringify(msg)); 

    // open a channel socket 
    var channel = new goog.appengine.Channel(msg.token); 

    var socket = channel.open(); 
    socket.onopen = function(){ console.log('socket.onopen')}; 
    socket.onmessage = function(msg){ console.log('socket.onmessage: ' + msg.data)}; 
    socket.onerror = function(err){ console.log('socket.onerror: ' + err.description + ', ' + err.code)}; 
    socket.onclose = function(){ console.log('socket.onclose')}; 
} 

내가 jQuery를에서 해당 코드를 실행,과 같이 :

$(document).ready(function() { 
    $.get('/admin/channel', {clientID:1}, listen_to_channel, 'json') 
}); 

내가 지금처럼 종속성을 사용하고 있습니다 :

<head> 
    <script type="text/javascript" src="/_ah/channel/jsapi"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script src="javascript/admin.js"></script> 
</head> 

예제 코드는 소켓이 HTML DOM의 태그 내에 만들어 져야한다는 것을 분명히합니다. 이것이 내 문제의 원인인가? 그렇다면 태그 내에 소켓을 만드는 방법이 어떻게 다릅니 까?

답변

1

폴링은 SDK에서 채널 API를 시뮬레이트하는 방식이므로 사용자가보고있는 내용이 예상됩니다.

+0

아! 감사. 레퍼런스가 있으십니까? – cyrf

+0

다음 코드를 볼 수 있습니다. https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/devappserver2/channel.py – Greg