频道API存在不触发

我试图在Channel API中使用Presence来处理断开/连接状态。

这里是我的一些代码。

的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> 

使用这个代码,当用户closures他们的浏览器或者其他东西时, connnectdisconnect不会被触发。

这段代码有什么问题吗?

是的,路由列表是错误的。 将('/', MainPage)放在路由列表的末尾。 从webapp2 URI路由指南 :

当应用程序接收到一个请求时,它会尝试按顺序匹配每个请求,直到匹配,然后调用相应的处理程序。