我创建了简单的代码来了解 Google App Engine Channel API 的工作原理。但是,实际上我的代码不起作用,我不知道为什么。我在 Python 方面不是很有经验,所以请原谅我,如果这会是一些愚蠢的错误。
服务器:
from google.appengine.api import channel
import webapp2
import jinja2
import os
import time
channel_key = 'key'
class MainHandler(webapp2.RequestHandler):
def get(self):
token = channel.create_channel(channel_key)
template_values = {'token': channel_key}
template = env.get_template('index.html')
self.response.write(template.render(template_values))
class OpenedHandler(webapp2.RequestHandler):
def post(self):
channel.send_message(channel_key, "hi")
env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
app = webapp2.WSGIApplication([
('/', MainHandler),
('/opened', OpenedHandler)
], debug=True)
客户:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
var token = "{{ token }}";
onOpened = function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/opened');
xhr.send();
};
onMessage = function(message) {
alert("something recieved");
alert(message);
}
</script>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
<script>
channel = new goog.appengine.Channel(token);
socket = channel.open();
socket.onopen = onOpened;
socket.onmessage = onMessage;
socket.onerror = function(e){
alert("error:"+e['description']);
};
socket.onclose = function(){
alert("close");
};
</script>
</body>
</html>
Javascript 控制台说,它已成功发送到 /opened,但随后没有警报出现,就像它没有响应一样。你有什么想法,问题出在哪里?
谢谢 Toneks
编辑:我在 javascript 中添加了 onerror 和 onclose 事件处理程序,并在打开页面后立即调用 onerror 事件说“Invalid+token”,然后是 onclose 事件。