docs: def start_responder(host='127.0.0.1', port=8080, event_log=None, loop=None):
      """."""
  
      loop = loop or asyncio.get_event_loop()
      event_log = event_log or structlog.get_logger()
  
      # Prepare a web application.
      app = web.Application(loop=loop, middlewares=[
          inject_request_id,
          access_log_middleware,
      ])
      app.on_response_prepare.append(echo_request_id)
      app.router.add_route('GET', '/', index)
      app.router.add_route('POST', '/create-process',
                           create_process, name='create-process')
      app.router.add_route('GET', '/process-status/{slug}',
                           process_status, name='process-status')
      app.router.add_route('POST', '/delete-process/{slug}',
                           delete_process, name='delete-process')
      app.router.add_route('GET', '/attach-console/{slug}',
                           attach_console, name='attach-console')
      app.router.add_route('GET', '/list-processes',
                           list_processes, name='list-processes')
  
      # Create storage folders.
      archives_path = os.path.join(
          '.', '.smartmob', 'archives',
      )
      if not os.path.isdir(archives_path):
          os.makedirs(archives_path)
      sources_path = os.path.join(
          '.', '.smartmob', 'sources',
      )
      if not os.path.isdir(sources_path):
          os.makedirs(sources_path)
      envs_path = os.path.join(
          '.', '.smartmob', 'envs',
      )
      if not os.path.isdir(envs_path):
          os.makedirs(envs_path)
  
      event_log.info('bind', transport='tcp', host=host, port=port)
  
      # Start accepting connections.
      handler = app.make_handler()
      server = yield from loop.create_server(handler, host, port)
      return app, handler, server