code: def pingable_ws_connect(request=None, on_message_callback=None,
                          on_ping_callback=None):
      
      # Copy and convert the headers dict/object (see comments in
      # AsyncHTTPClient.fetch)
      request.headers = httputil.HTTPHeaders(request.headers)
      request = httpclient._RequestProxy(
          request, httpclient.HTTPRequest._DEFAULTS)
  
      # for tornado 4.5.x compatibility
      if version_info[0] == 4:
          conn = PingableWSClientConnection(io_loop=ioloop.IOLoop.current(),
              request=request,
              on_message_callback=on_message_callback,
              on_ping_callback=on_ping_callback)
      else:
          conn = PingableWSClientConnection(request=request,
              on_message_callback=on_message_callback,
              on_ping_callback=on_ping_callback,
              max_message_size=getattr(websocket, '_default_max_message_size', 10 * 1024 * 1024))
  
      return conn.connect_future
docs: A variation on websocket_connect that returns a PingableWSClientConnection
      with on_ping_callback.