python - चैनल एपीआई उपस्थिति ट्रिगर नहीं कर रहा है



google-app-engine channel-api (1)

मैं चैनल एपीआई में उपस्थिति का उपयोग कर डिस्कनेक्ट / कनेक्ट स्टेटस को संभालने की कोशिश कर रहा हूं।

यहां मेरे कुछ कोड दिए गए हैं।

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)

जावास्क्रिप्ट

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

इस कोड का उपयोग करके, जब कोई उपयोगकर्ता अपने ब्राउज़र को बंद करता है या जो भी हो, तो connnect नहीं हो सकता है और disconnect नहीं हो रहा है।

क्या इस कोड में कुछ गड़बड़ है?


हां, मार्ग सूची गलत है। मार्ग सूची के अंत में रखो ('/', MainPage)वेबएप 2 यूआरआई रूटिंग गाइड से :

जब एप्लिकेशन को अनुरोध प्राप्त होता है, तो यह प्रत्येक मैच को एक मैच तक क्रम में मिलान करने का प्रयास करता है, और उसके बाद संबंधित हैंडलर को कॉल करता है।