私のGAEアプリケーション(Python)では、リクエストオブジェクトのhost
部分に基づいてマルチテナントとマルチサイトのサポートを実装しました。カスタムドメインを持つGoogle App Engine Channel 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属性にカスタムドメインのホスト名を追加:
私も手動で上書きしてみましたチャンネルソケットのベース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