Python:在BaseHTTPRequestHandler中实现长轮询机制
我的任务是实现长轮询机制。 我需要在30秒内收集一些请求,然后针对特定请求一次性发送所有响应Python:在BaseHTTPRequestHandler中实现长轮询机制,python,python-3.x,httpserver,long-polling,basehttprequesthandler,Python,Python 3.x,Httpserver,Long Polling,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 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, content_length):
self.send_response(200)
self.send_header('Content-type', 'text/javascript')
self.send_header('Connection', 'keep-alive')
self.send_header("Content-length", 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”时,我希望收集所有请求(我尝试使用queue进行收集),然后每30秒发送一次对所有请求的响应。
我不知道我究竟怎样才能做到。
我尝试使用从队列中获取响应函数并执行\u subscribe\u resp
函数的任务。但答复不能以这种方式发送。请给我打电话,告诉我如何实施