python google-app-engine channel-api

python - Presencia API de canal no activada



google-app-engine channel-api (1)

Estoy tratando de manejar los estados de desconexión / conexión usando Presencia en Channel API.

Aquí hay algunos de mis códigos.

app.yaml

handlers: - url: /(.*/.(gif|png|jpg|ico|js|css)) static_files: /1 upload: (.*/.(gif|png|jpg|ico|js|css)) - url: .* script: main.py inbound_services: - channel_presence

main.py

class onConnect(webapp.RequestHandler): def post(self): for user in users: users = User.all().fetch(1000) client = client_id = self.request.get(''from'') channel.send_message(user.channel,'' connected''); class onDisconnect(webapp.RequestHandler): def post(self): Mainpage() for user in users: users = User.all().fetch(1000) client = client_id = self.request.get(''from'') channel.send_message(user.channel, '' disconnected''); application = webapp.WSGIApplication( [(''/'', MainPage), (''/_ah/channel/connected/'',onConnect), (''/_ah/channel/disconnected/'',onDisconnect), (''/chat'',handleChat)], debug=True)

Javascript

<script> openChannel = function(){ var token = ''{{ token }}''; var channel = new goog.appengine.Channel(token); var handler = { ''onopen'': onOpened, ''onmessage'': onMessage, ''onerror'': function() {}, ''onclose'': function() {} }; var socket = channel.open(handler); socket.onopen = onOpened; socket.onmessage = onMessage; var chat = document.getElementById(''chatinput''); chat.onkeyup = function(e){ if(e.keyCode == 13){ sendChat(this.value); this.value = ''''; } } } sendMessage = function(path, opt_param) { if (opt_param) { path += ''?'' + opt_param; } var xhr = new XMLHttpRequest(); xhr.open(''POST'', path, true); xhr.send(); }; onOpened = function(){ console.log(''Channel Opened''); var chatlog = document.getElementById(''chatlog''); var msg = document.createElement(''div''); msg.innerHTML = ''Channel Opened''; chatlog.appendChild(msg); sendMessage(''/chat'',''m=''+''A User Joined.''); } onMessage = function(m){ console.log(''Message Recieved''); var chatlog = document.getElementById(''chatlog''); var msg = document.createElement(''div''); var d = new Date(); msg.innerHTML = d.toLocaleTimeString() + '': '' + m.data; chatlog.appendChild(msg); } sendChat = function(msg){ console.log(msg); sendMessage(''/chat'',''m=''+msg); } openChannel(); </script>

Al usar este código, connnect y disconnect no se activa cuando un usuario cierra su navegador o lo que sea.

¿Hay algo mal con este código?


Sí, la lista de rutas es incorrecta. Pon (''/'', MainPage) al final de la lista de rutas. De la guía de enrutamiento URI de webapp2 :

Cuando la aplicación recibe una solicitud, intenta hacer coincidir cada una en orden hasta que coincida, y luego llamar al controlador correspondiente.