code: def disconnect(self) -> None:
      _logger.debug(f"Disconnect from {self._url}")
      if self._closing:
          _logger.debug("Already closing")
      else:
          try:
              if self._conn is not None:
                  self._conn.send({"type": "_bye_"})
          except Exception as e:
              _logger.debug(f"Failed to send bye: {repr(e)}")
          self._closing = True
          self._close_conn("client intentionally close")
  
file_path: nni/nni/runtime/command_channel/websocket/channel.py
imports: from __future__ import annotations
  import logging
  import time
  from ..base import Command, CommandChannel
  from .connection import WsConnection
label_desc: Use image node_id 3 for calling the WsChannelClient obj's underlying member method code with example usage: obj.disconnect() without return types