0

我正在尝试创建尽可能小的 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 时,我希望将“准备好”替换为“消息”。但这永远不会发生。没有调用任何套接字处理函数。

我暂时被困住了,如果有任何帮助或建议,我将不胜感激。

谢谢你。

4

1 回答 1

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>

我引用的其他脚本来自其他堆栈溢出答案,我猜它们没有正确适用于这个问题。

谢谢。

于 2013-07-09T03:49:25.040 回答