我正在尝试创建最小的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时,我希望将“ready”替换为“message”。但这从未发生过。没有调用任何套接字处理函数。
我暂时陷入困境,并希望得到任何帮助或建议。
谢谢。
答案 0 :(得分:0)
好的,我明白了。有两个问题。首先,模板行
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>
我引用的其他脚本来自其他堆栈溢出答案,我猜他们没有正确应用于此问题。
感谢。