チャネル 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」に置き換えられているはずです。しかし、これは決して起こりません。ソケット ハンドラー関数が呼び出されていません。
私は今のところ立ち往生しており、助けや提案をいただければ幸いです。
ありがとうございました。