docs: function (uri, host, port, path, clientId) {
        // Check dependencies are satisfied in this browser.
        if (!("WebSocket" in global && global.WebSocket !== null)) {
          throw new Error(format(ERROR.UNSUPPORTED, ["WebSocket"]));
        }
        if (!("localStorage" in global && global.localStorage !== null)) {
          throw new Error(format(ERROR.UNSUPPORTED, ["localStorage"]));
        }
        if (!("ArrayBuffer" in global && global.ArrayBuffer !== null)) {
          throw new Error(format(ERROR.UNSUPPORTED, ["ArrayBuffer"]));
        }
        this._trace("Paho.MQTT.Client", uri, host, port, path, clientId);
  
        this.host = host;
        this.port = port;
        this.path = path;
        this.uri = uri;
        this.clientId = clientId;
        this._wsuri = null;
  
        // Local storagekeys are qualified with the following string.
        // The conditional inclusion of path in the key is for backward
        // compatibility to when the path was not configurable and assumed to
        // be /mqtt
        this._localKey=host+":"+port+(path!="/mqtt"?":"+path:"")+":"+clientId+":";
  
        // Create private instance-only message queue
        // Internal queue of messages to be sent, in sending order.
        this._msg_queue = [];
        this._buffered_msg_queue = [];
  
        // Messages we have sent and are expecting a response for, indexed by their respective message ids.
        this._sentMessages = {};
  
        // Messages we have received and acknowleged and are expecting a confirm message for
        // indexed by their respective message ids.
        this._receivedMessages = {};
  
        // Internal list of callbacks to be executed when messages
        // have been successfully sent over web socket, e.g. disconnect
        // when it doesn't have to wait for ACK, just message is dispatched.
        this._notify_msg_sent = {};
  
        // Unique identifier for SEND messages, incrementing
        // counter as messages are sent.
        this._message_identifier = 1;
  
        // Used to determine the transmission sequence of stored sent messages.
        this._sequence = 0;
  
  
        // Load the local state, if any, from the saved version, only restore state relevant to this client.
        for (var key in localStorage)
          if (   key.indexOf("Sent:"+this._localKey) === 0 || key.indexOf("Received:"+this._localKey) === 0)
            this.restore(key);
      }