我正在尝试创建尽可能小的 GAE 应用程序来显示通道 api 的使用。我在 python 中有两个处理程序,第一个“TestPage”发出如下所示的 html。第二个“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>
因此,在 chrome 中,我拉起 TestPage 并看到“就绪”消息。然后我在另一个选项卡中拉起 SendPage。并查看“已发送消息”。然后,当我回到 TestPage 时,我希望将“准备好”替换为“消息”。但这永远不会发生。没有调用任何套接字处理函数。
我暂时被困住了,如果有任何帮助或建议,我将不胜感激。
谢谢你。