我正在创建一个小应用程序来测试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代码尝试重复连接的网址,它引发了第二个错误:
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)
我的错误是什么,我该怎么办?谢谢!
答案 0 :(得分:1)
似乎Channel API在localhost上的工作方式与GAE主机不同。我将它上传到云端,现在运行良好。虽然看起来它在本地计算机上工作正常,但它会在错误日志中显示重复的永久JS错误。
答案 1 :(得分:0)
您可以尝试删除handler参数并添加处理程序作为套接字对象的方法,即socket.onopen = function() {};
等。这对我有用。但你是对的。根据{{3}},您应该能够通过使用handler参数来实现此功能。 HMM。