def _heartbeat(self): now = time.time() for connection in self._client.connection_manager.connections.values(): time_since_last_read = now - connection.last_read if time_since_last_read > self._heartbeat_timeout: if connection.heartbeating: self.logger.warn( "Heartbeat: Did not hear back after %ss from %s" % (time_since_last_read, connection)) self._on_heartbeat_stopped(connection) if time_since_last_read > self._heartbeat_interval: request = client_ping_codec.encode_request() self._client.invoker.invoke_on_connection(request, connection, ignore_heartbeat=True) else: if not connection.heartbeating: self._on_heartbeat_restored(connection)
def _check_connection(self, now, connection): if not connection.live: return if (now - connection.last_read_time) > self._heartbeat_timeout: _logger.warning("Heartbeat failed over the connection: %s", connection) connection.close( "Heartbeat timed out", TargetDisconnectedError("Heartbeat timed out to connection %s" % connection), ) return if (now - connection.last_write_time) > self._heartbeat_interval: request = client_ping_codec.encode_request() invocation = Invocation(request, connection=connection, urgent=True) self._invocation_service.invoke(invocation)