내 GAE 앱 (Python)에 요청 객체의 host
부분을 기반으로 다중 점유 및 다중 사이트 지원을 구현했습니다.맞춤 도메인이있는 Google App Engine 채널 API
예를 들어 www.foo.com/index.html
과 www.bar.com/index.html
은 모두 동일한 앱에서 처리합니다 (예 : myapp.appspot.com
). 앱은 호스트 값을 읽고 사용할 네임 스페이스 및 사이트 구성을 결정합니다. 앱이 사용자 에이전트로부터 직접 요청을받는 한 위대한 작품입니다.
채널 API를 사용하고 싶지만 /_ah/channel/connected/
및 /_ah/channel/disconnected/
에 대한 요청이 원래 사용자 에이전트에서 발생하지 않았기 때문에 문제가 있습니다. 대신 요청은 Host: myapp.appspot.com
이고 매개 변수는 to=myapp.appspot.com
입니다. 합니다 (from
매개 변수는 내가 기대하는 토큰입니다. 또한 www.foo.com/_ah/channel/jsapi
문서화하지만 예상 할 수있는 것처럼 보인다되지 않은 TalkGadget에 서버로 리디렉션됩니다.)
나는 가정 문제가되지 않는 channel.js
의 코드에 의해 발생 원래 호스트를 사용하여 내 애플 리케이션 호출, 예 : www.foo.com/_ah/channel/connected
. 대신 (내가 말할 수있는 한) talkgadget.google.com
호스트를 사용하여 내 응용 프로그램을 호출하지만 myapp.appspot.com
을 사용하여 원래 호스트를 무시하므로 내 요청에 대해 host
값을 사용할 수 없습니다.
해결 방법으로 호스트 토큰을 채널 토큰에 포함시키는 방법을 알아 냈습니다. 따라서 내 connected
및 disconnected
처리기가 토큰을 수신 할 때 대신 토큰을 사용할 수 있습니다.
그러나, 나는 아직도 (예를 들어, www.foo.com
) 요청 /_ah/channel/connected/
및 /_ah/channel/disconnected/
로를 원래의 호스트 이름을 얻을 수있는 더 나은 방법,이 있는지 알고 싶습니다. 어떤 아이디어?
JS의 src 속성에 사용자 지정 도메인 호스트 이름을 추가 : 내가 수동을 무시하려
<script type="text/javascript" src="//www.foo.com/_ah/channel/jsapi"></script>
이
은 지금까지 (와 아웃 어떤 성공) 시도 것입니다 채널 소켓의베이스 URL, 여기 제안 : https://stackoverflow.com/questions/16558776/google-app-engine-channel-api-same-origin-policy<script type="text/javascript">
onOpened = function() {
// TODO
};
onMessage = function() {
// TODO
};
onError = function() {
// TODO
};
onClose = function() {
// TODO
};
goog.appengine.Socket.BASE_URL = "https://www.foo.com/_ah/channel/";
channel = new goog.appengine.Channel('{{channelToken}}');
socket = channel.open();
socket.onopen = onOpened;
socket.onmessage = onMessage;
socket.onerror = onError;
socket.onclose = onClose;
</script>
내가 channel.js에 대한 공식 문서를 찾을 수 없습니다 내가 몇 가지를 구현하고 싶지 않아 Google의 다음 업데이트로 쉽게 깨지기 쉬운 것.
이것은 나를 위해 일했습니다 : goog.appengine.Socket.BASE_URL = "https://www.foo.com/_ah/channel/"; – Subir