docs: function Ipc()
  {
      events.EventEmitter.call(this);
      this.role = "";
      this.msgs = {};
      this._queue = [];
      this.restarting = [];
      this.modules = [];
      this.clients = { cache: new Client(), queue: new Client() };
      this.ports = {};
      // Use shared token buckets inside the server process, reuse the same object so we do not generate
      // a lot of short lived objects, the whole operation including serialization from/to the cache is atomic.
      this.tokenBucket = new metrics.TokenBucket()
  
      // Config params
      this.configParams = { "cache-local": "local://", "queue-local": "local://" };
      this.args = [
               { name: "ping-interval", type: "int", min: 0, descr: "Interval for a worker keep-alive pings, if not received within this period it will be killed" },
               { name: "system-queue", descr: "System queue name to subscribe for control messages, this is a PUB/SUB queue to process system messages like restart, re-init config,..." },
               { name: "lru-max", type: "callback", callback: function(v) { bkcache.lruInit(lib.toNumber(v, { min: 10000 })) }, descr: "Max number of items in the LRU cache, this cache is managed by the master Web server process and available to all Web processes maintaining only one copy per machine, Web proceses communicate with LRU cache via IPC mechanism between node processes" },
               { name: "lru-max-(.+)", type: "callback", nocamel: 1, strip: /lru-max-/, callback: function(v,n) { if(core.role==n) bkcache.lruInit(lib.toNumber(v, { min: 100 })) }, descr: "Max number of items in the local LRU cache by process role, works the same way as the global one but only is set for the specified process role" },
               { name: "cache-?([a-z0-9]+)?", obj: "configParams", nocamel: 1, descr: "An URL that points to the cache server in the format `PROTO://HOST[:PORT]?PARAMS`, to use for caching in the API/DB requests, default is local LRU cache, multiple caches can be defined with unique names, all params starting with `bk-` will be copied into the options without the prefix and removed from the url, the rest of params will be left in the url" },
               { name: "queue-?([a-z0-9]+)?", obj: "configParams", nocamel: 1, descr: "An URL that points to the queue server in the format `PROTO://HOST[:PORT]?PARAMS`, to use for PUB/SUB or job queues, default is no local queue, multiple queues can be defined with unique names, params are handled the same way as for cache" },
               { name: "cache(-([a-z0-9]+)?-?options)-(.+)$", obj: "configParams.cache$1", make: "$3", camel: '-', autotype: 1, onparse: function(v,o) {this.parseOptions(v,o)}, onupdate: function(v,o) {this.applyOptions(v,o)}, descr: "Additional parameters for cache clients, specific to each implementation, Example: `-ipc-cache-options-ttl 3000`" },
               { name: "queue(-([a-z0-9]+)?-?options)-(.+)$", obj: "configParams.queue$1", make: "$3", camel: '-', autotype: 1, onparse: function(v,o) {this.parseOptions(v,o)}, onupdate: function(v,o) {this.applyOptions(v,o)}, descr: "Additional parameters for queue clients, specific to each implementation, Example: `-ipc-queue-redis-options-max_attempts 3`" },
           ];
  }