Я создал простой код, чтобы понять, как работает API канала Google App Engine. Однако на самом деле мой код не работает, и я не знаю, почему. Я не очень опытен в Python, так простите меня, если это будет какая-то глупая ошибка.API канала Google-App-Engine: сервер не отправляет сообщение клиенту
Сервер:
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 консоль говорит, что он был успешно отослан к/открыт, но оповещению не приходит, как он ответил нету. Есть ли у вас какие-либо идеи, где проблема?
Благодаря Toneks
EDIT: Я добавил OnError и OnClose обработчиков событий в яваскрипт и сразу после opnening страницы он называет OnError события говоря: «Invalid + маркер», а затем OnClose событие.
Я даже не создаю канал. Можете ли вы ответить на это http://stackoverflow.com/questions/34332222/unable-to-create-new-channel-in-javascript-of-channel-api –