class_docstr: Service that controls the FiftyOne web server.
class_docstr_tok: ["Service","that","controls","the","FiftyOne","web","server","."]
code: def start(self):
      focx._get_context()  # ensure context is defined
      address = self._address or "127.0.0.1"
      port = self._port
  
      try:
          server_version = requests.get(
              "http://%s:%i/fiftyone" % (address, port), timeout=2
          ).json()["version"]
      except:
          server_version = None
  
      if server_version is None:
          # There is likely not a fiftyone server running (remote or local),
          # so start a local server. If there actually is a fiftyone server
          # running that didn't respond to /fiftyone, the local server will
          # fail to start but the app will still connect successfully.
          super().start()
          self._wait_for_child_port(port=port)
      else:
          logger.info(
              "Connected to FiftyOne on port %i at %s.\nIf you are not "
              "connecting to a remote session, you may need to start a new "
              "session and specify a port",
              port,
              address,
          )
          if server_version != foc.VERSION:
              logger.warning(
                  "Server version (%s) does not match client version (%s)",
                  server_version,
                  foc.VERSION,
              )
  
imports: import logging
  import os
  import subprocess
  import sys
  import psutil
  import requests
  from retrying import retry
  import eta.core.utils
  import fiftyone.constants
  import fiftyone.core.config
  import fiftyone.core.context
  import fiftyone.service.util
label_desc: Use image node_id 2 for calling the ServerService obj's underlying member method code with example usage: obj.start() without return types