constructor(protocol, ips, headers = null, internal = null) {
    this.id = uuid.v4();
    this.protocol = protocol;
    this.headers = {};
    this.internal = {};

    if (!Array.isArray(ips)) {
      throw new TypeError(`Expected ips to be an Array, got ${typeof ips}`);
    }
    this.ips = ips;

    if (isPlainObject(headers)) {
      this.headers = headers;
    }

    if (isPlainObject(internal)) {
      this.internal = internal;
    }

    Object.freeze(this);
  }
@class ClientConnection
@param {string} protocol - The protocol used (http, websocket, mqtt etc)
@param {Array.<string>} ips - The list of forwarded ips (= X-Forwarded-For http header + the final ip, i.e. client, proxy1, proxy2, etc.)
@param {object} [headers] - Optional extra key-value object. I.e., for http, will receive the request headers