微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:在BaseHTTPRequestHandler中实现长轮询机制

如何解决Python:在BaseHTTPRequestHandler中实现长轮询机制

我有一个任务来实现长轮询机制。 我需要在30秒内收集一些请求,然后一次发送所有特定请求的响应。

 def make_handler(ip1,ip2):
     class Server(BaseHTTPRequestHandler):
        protocol_version = 'HTTP/1.1'
        wbufsize = -1

        def log_message(self,format,*args):
           pass

        def _set_headers(self,content_length):
            self.send_response(200)
            self.send_header('Content-type','application/json')
            self.send_header('Connection','keep-alive')
            self.send_header("Content-length",content_length)
            self.end_headers()

        def _set_pubnub_headers(self,'text/javascript')
            self.send_header('Connection',content_length)
            self.end_headers()

        def _subscribe_resp(self):
            global version
            start_date = str(time.time())
            content = json.dumps({"t": {"t": start_date,"r": 12},"m": [{"d": {"type": "ping","body": {"version": version}}}]}).encode()
            content_length = len(content)
            try:
                self._set_pubnub_headers(content_length)
                self.wfile.write(content)
            except socket.error as error:
                pass
            except ValueError as error:
                pass

        def _send_response(self,content):
            try:
                self._set_headers(len(content))
                self.wfile.write(content)
            except socket.error:
                pass

        def do_GET(self):
            path = self.path
            if path.startswith("/some/request"):
                work_queue.put((self._subscribe_resp,[]))
            else:
                self.send_response(404)
                self.send_header('Content-type','application/json')
                self.send_header('Connection','keep-alive')
                self.send_header("Content-length",0)
                try:
                    self.end_headers()
                except socket.error:
                    pass
  return Server

class ThreadedHTTPServer(ThreadingMixIn,HTTPServer):
   pass

当我收到“ / some / request”请求时,我想收集所有请求(我尝试使用队列进行处理),然后每30秒一次发送所有请求的响应。 我不知道我该怎么做。 我尝试使用从队列中获取响应函数并执行_subscribe_resp函数的任务。但是不能以这种方式发送响应。请给我一些想法,我应该如何实现它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。