code: function MessageListener(ptcl, opts) {
    opts = opts || {};
    events.EventEmitter.call(this);
  
    this._ptcl = ptcl;
    this._strict = !!opts.strictErrors;
    this._endWritable = !!utils.getOption(opts, 'endWritable', true);
    this._prefix = normalizedPrefix(opts.scope);
  
    this._cache = opts.cache || {};
    var fgpt = this._ptcl.getFingerprint();
    if (!this._cache[fgpt]) {
      // Add the listener's protocol to the cache if it isn't already there. This
      // will save a handshake the first time on emitters with the same protocol.
      this._cache[fgpt] = new Adapter(this._ptcl, this._ptcl, fgpt);
    }
  
    this._adapter = null;
    this._hook = null;
  
    this._pending = 0;
    this._destroyed = false;
    this._interrupted = false;
    this.once('_eot', function (pending) { this.emit('eot', pending); });
  }
docs: The server-side emitter equivalent.