我创建了简单的代码来了解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控制台说,它已成功发送到/ open,但没有警报发出,就像它没有响应一样。 您有什么想法,问题出在哪里?
感谢音调
编辑:我向javascript中添加了onerror和onclose事件处理程序,并在优化页面后立即调用了onerror事件,说“ Invalid + token”,然后是onclose事件。
我敢打赌,如果您记录了channel_key,则在创建频道和发送消息时会有所不同。 对于本练习,您可以只使用一个常数。 对于“真实”代码,您将需要使用数据存储区和内存缓存作为通道键。