def __heartbeat_loop(self): """ Main loop for sending (and monitoring received) heartbeats. """ send_time = monotonic() while self.running: time.sleep(self.sleep_time) now = monotonic() if self.send_sleep != 0 and now - send_time > self.send_sleep: send_time = now log.debug("Sending a heartbeat message at %s", now) try: self.transport.transmit(utils.Frame(None, {}, None)) except exception.NotConnectedException: log.debug("Lost connection, unable to send heartbeat") except Exception: _, e, _ = sys.exc_info() log.debug("Unable to send heartbeat, due to: %s", e) if self.receive_sleep != 0: diff_receive = now - self.received_heartbeat if diff_receive > self.receive_sleep: # heartbeat timeout log.warning("Heartbeat timeout: diff_receive=%s, time=%s, lastrec=%s", diff_receive, now, self.received_heartbeat) self.transport.disconnect_socket() self.transport.set_connected(False) for listener in self.transport.listeners.values(): listener.on_heartbeat_timeout()
def __heartbeat_loop(self): """ Main loop for sending (and monitoring received) heartbeats. """ logging.info('Starting heartbeat loop') now = monotonic() # Setup the initial due time for the outbound heartbeat if self.send_sleep != 0: self.next_outbound_heartbeat = now + self.send_sleep while self.running: now = monotonic() next_events = [] if self.next_outbound_heartbeat is not None: next_events.append(self.next_outbound_heartbeat - now) if self.receive_sleep != 0: t = self.received_heartbeat + self.receive_sleep - now if t > 0: next_events.append(t) sleep_time = min(next_events) if sleep_time > 0: terminate = self.heartbeat_terminate_event.wait(sleep_time) if terminate: break now = monotonic() if not self.transport.is_connected(): time.sleep(self.send_sleep) continue if self.send_sleep != 0 and now > self.next_outbound_heartbeat: logging.debug("Sending a heartbeat message at %s", now) try: self.transport.transmit(utils.Frame(None, {}, None)) except exception.NotConnectedException: logging.debug("Lost connection, unable to send heartbeat") except Exception: _, e, _ = sys.exc_info() logging.debug("Unable to send heartbeat, due to: %s", e) if self.receive_sleep != 0: diff_receive = now - self.received_heartbeat if diff_receive > self.receive_sleep: # heartbeat timeout logging.warning( "Heartbeat timeout: diff_receive=%s, time=%s, lastrec=%s", diff_receive, now, self.received_heartbeat) self.transport.set_connected(False) self.transport.disconnect_socket() self.transport.stop() for listener in self.transport.listeners.values(): listener.on_heartbeat_timeout() self.heartbeat_thread = None self.heartbeat_terminate_event.clear() logging.info('Heartbeat loop ended')
def send_frame(self, cmd, headers={}, body=''): """ Encode and send a stomp frame through the underlying transport: :param cmd: the protocol command :param headers: a map of headers to include in the frame :param body: the content of the message """ frame = utils.Frame(cmd, headers, body) self.transport.transmit(frame)
def send_frame(self, cmd, headers={}, body=''): """ Encode and send a stomp frame through the underlying transport: :param str cmd: the protocol command :param dict headers: a map of headers to include in the frame :param body: the content of the message """ if cmd != CMD_CONNECT: self._escape_headers(headers) frame = utils.Frame(cmd, headers, body) self.transport.transmit(frame)
def send_frame(self, cmd, headers={}, body=''): frame = utils.Frame(cmd, headers, body) self.transport.transmit(frame)
def send_frame(self, cmd, headers={}, body=''): if cmd != CMD_CONNECT: self._escape_headers(headers) frame = utils.Frame(cmd, headers, body) self.transport.transmit(frame)