2013-06-08 3 views
1

Я создал простой код, чтобы понять, как работает 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 событие.

+0

Я даже не создаю канал. Можете ли вы ответить на это http://stackoverflow.com/questions/34332222/unable-to-create-new-channel-in-javascript-of-channel-api –

ответ

0

Готов поспорить, если вы запишете свой канал, будет отличаться при создании канала и при отправке сообщения. Для этого упражнения вы можете просто использовать константу; для «реального» кода вы захотите использовать хранилище данных и memcache для ваших ключей канала.

+0

Я пробовал его с константой, и результат был таким же. (Я думал, что он может создавать больше каналов с одним и тем же токеном). Затем я также попытался отправить токен с клиента обратно на сервер, чтобы он был таким же, но и ничего не случилось. – Toneks

 Смежные вопросы

  • Нет связанных вопросов^_^