Я создал простой код, чтобы понять, как работает 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, но затем не приходит оповещение, как будто он не ответил. У вас есть идеи, где проблема?
Спасибо Тонекс
EDIT: я добавил обработчики событий onerror и onclose в javascript, и сразу после открытия страницы он вызывает событие onerror, говорящее «Неверный + токен», а затем событие onclose.