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