0

チャネル API の使用を示すために、可能な限り最小の GAE アプリを作成しようとしています。Python には 2 つのハンドラーがあり、最初の "TestPage" は以下に示す html を送信します。2 番目の「SendPage」は、チャネルを介してテスト ページにメッセージを送信しようとします。TestPage のコードは次のとおりです。

class TestPage(Handler):
    def get(self):
        token = channel.create_channel("1")
        self.render("test.html", token = token)

ID が「1」のチャネルを作成し、create_channel() から返されたトークンを使用してページを再表示するだけです。

SendPage は次のとおりです。

class SendPage(Handler):
    def get(self):
        channel.send_message("1", "hello")
        self.write("sent hello to 1")

HTMLは私が得ることができるほど小さいです:

<!DOCTYPE HTML>
<html>
<body>
<br>Token is {{ token }}
<br>
<div id="debug">_</div>

<!--
<script src="https://talkgadget.google.com/talkgadget/channel.js"></script>
-->
<script src="static/channel.js"></script>
<script defer="defer">
    function debug(s) {
        document.getElementById("debug").innerHTML = s;
    }

    var channel = new goog.appengine.Channel( {{ token }} );
    var socket = channel.open();
    socket.onopen = function(e) {
        debug("open");
    }
    socket.onclose = function(e) {
        debug("close");
    }
    socket.onerror = function(e) {
        debug("error");
    }
    socket.onmessage = function(e) {
        debug("message");
    }
    debug("ready");

</script>
</body>
</html>

そのため、クロム内で TestPage をプルアップすると、「準備完了」メッセージが表示されます。次に、別のタブで SendPage をプルアップします。そして、「送信済みメッセージ」を参照してください。次に、TestPage に戻ると、「ready」が「message」に置き換えられているはずです。しかし、これは決して起こりません。ソケット ハンドラー関数が呼び出されていません。

私は今のところ立ち往生しており、助けや提案をいただければ幸いです。

ありがとうございました。

4

1 に答える 1

0

わかりました、私はそれを理解しました。2 つの問題がありました。まず、テンプレート行

var channel = new goog.appengine.Channel( {{ token }} );

になるはずだった

var channel = new goog.appengine.Channel( "{{token}}" );

トークンは「channel-2052893164-1373347311-1」のようなもので、静かに数字に評価されました。

次に、channel.js の正しいスクリプトは

<script type="text/javascript" src="/_ah/channel/jsapi"></script>

私が参照した他のスクリプトは、他のスタック オーバーフローの回答からのものであり、この問題には適切に適用されなかったと思います。

ありがとう。

于 2013-07-09T03:49:25.040 に答える