Ejemplo n.º 1
0
    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)