Exemplo n.º 1
0
 def check_timeouts(self):
     """
     Runs itself periodically to enforce any expired timeouts.
     """
     try:
         if not self._task:
             return
         duration = current_time() - self._time
         stage = self._http.stage
         if stage is Stage.IDLE and duration > self.keep_alive_timeout:
             logger.debug("KeepAlive Timeout. Closing connection.")
         elif stage is Stage.REQUEST and duration > self.request_timeout:
             logger.debug("Request Timeout. Closing connection.")
             self._http.exception = RequestTimeout("Request Timeout")
         elif stage is Stage.HANDLER and self._http.upgrade_websocket:
             logger.debug("Handling websocket. Timeouts disabled.")
             return
         elif (stage in (Stage.HANDLER, Stage.RESPONSE, Stage.FAILED)
               and duration > self.response_timeout):
             logger.debug("Response Timeout. Closing connection.")
             self._http.exception = ServiceUnavailable("Response Timeout")
         else:
             interval = (min(
                 self.keep_alive_timeout,
                 self.request_timeout,
                 self.response_timeout,
             ) / 2)
             self.loop.call_later(max(0.1, interval), self.check_timeouts)
             return
         self._task.cancel()
     except Exception:
         error_logger.exception("protocol.check_timeouts")
Exemplo n.º 2
0
 def connection_timeout(self):
     # Check if
     time_elapsed = current_time - self._last_request_time
     if time_elapsed < self.request_timeout:
         time_left = self.request_timeout - time_elapsed
         self._timeout_handler = (self.loop.call_later(
             time_left, self.connection_timeout))
     else:
         if self._request_handler_task:
             self._request_handler_task.cancel()
         exception = RequestTimeout('Request Timeout')
         self.write_error(exception)
Exemplo n.º 3
0
 def connection_timeout(self):
     """
     连接超时
     """
     time_elapsed = current_time - self._last_request_time   # 计算与上次请求间隔
     if time_elapsed < self.request_timeout: # 未超时
         time_left = self.request_timeout - time_elapsed
         self._timeout_handler = \
             self.loop.call_later(time_left, self.connection_timeout)
     else:   # 超时
         if self._request_handler_task:
             self._request_handler_task.cancel()
         exception = RequestTimeout('Request Timeout')
         self.write_error(exception)
Exemplo n.º 4
0
 def request_timeout_callback(self):
     # See the docstring in the RequestTimeout exception, to see
     # exactly what this timeout is checking for.
     # Check if elapsed time since request initiated exceeds our
     # configured maximum request timeout value
     time_elapsed = time() - self._last_request_time
     if time_elapsed < self.request_timeout:
         time_left = self.request_timeout - time_elapsed
         self._request_timeout_handler = self.loop.call_later(
             time_left, self.request_timeout_callback)
     else:
         if self._request_stream_task:
             self._request_stream_task.cancel()
         if self._request_handler_task:
             self._request_handler_task.cancel()
         self.write_error(RequestTimeout("Request Timeout"))