无法在本地计算机上使用GAE通道API

1 投票
2 回答
1166 浏览
提问于 2025-04-16 09:13

我正在创建一个小应用程序,想测试一下GAE Channel API是怎么工作的。我觉得我按照文档上的说明做了所有步骤,但当我启动应用时,Firefox的错误日志里显示了一个关于语法的错误,接着又出现了一个重复的错误,提示找不到某个元素。

这是第一个错误的信息:

Source: http://127.0.0.1:8080/_ah/channel/dev?command=connect&channel=channel-773698929-185804764220139124118
Line 1, symbol 1

这是我的JavaScript代码尝试连接的URL,它不断重试,因此出现了第二个错误:

http://127.0.0.1:8080/_ah/channel/dev?command=poll&channel=channel-2071442473-185804764220139124118&client=1

我通过jQuery的$.get发起一个JSON请求来获取令牌。然后我运行这段代码来获取令牌并打开通道。错误在我运行socket = channel.open(handler)时开始出现:

var response = JSON.parse(data);
        var token = response.token.toString();
        channel = new goog.appengine.Channel(token);
        var handler = {
            'onopen': onOpened,
            'onmessage': onMessage,
            'onerror': function() {
            },
            'onclose': function() {
            }
        };

        socket = channel.open(handler);

这是用Python编写的服务器端代码,用来打开通道:

class OpenChannel(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
        token = channel.create_channel(user.user_id())
        serialized = json.dumps({'token': token})
        self.response.headers['Content-Type'] = "application/json"
        self.response.out.write(serialized)

我的错误是什么,我该怎么办呢?谢谢!

2 个回答

0

你可以试着去掉处理程序的参数,然后把处理程序作为socket对象的方法来添加,比如说 socket.onopen = function() {}; 这样做。我这样做是有效的。不过你说得对。根据这个链接,你应该可以通过使用处理程序参数来让它正常工作。嗯。

1

看起来Channel API在本地和在GAE(谷歌应用引擎)上运行的方式不太一样。我把它上传到云端,现在运行得很好。虽然在本地电脑上看起来也没问题,但错误日志里却一直显示一个永久性的JavaScript错误。

撰写回答