Starts processing the request for this protocol consumer.

        There is no need to override this method,
        implement :meth:`start_request` instead.
        If either :attr:`connection` or :attr:`transport` are missing, a
        :class:`RuntimeError` occurs.

        For server side consumer, this method simply fires the ``pre_request``
        event.

def start(self, request=None):
        """Starts processing the request for this protocol consumer.

        There is no need to override this method,
        implement :meth:`start_request` instead.
        If either :attr:`connection` or :attr:`transport` are missing, a
        :class:`RuntimeError` occurs.

        For server side consumer, this method simply fires the ``pre_request``
        event.
        """
        self.connection.processed += 1
        self.producer.requests_processed += 1
        self.event('post_request').bind(self.finished_reading)
        self.request = request or self.create_request()
        try:
            self.fire_event('pre_request')
        except AbortEvent:
            if self._loop.get_debug():
                self.producer.logger.debug('Abort request %s', request)
        else:
            self.start_request()