docs: function(channel, callback, context) {
      if (channel instanceof Array)
        return Faye.map(channel, function(c) {
          return this.subscribe(c, callback, context);
        }, this);
  
      var subscription = new Faye.Subscription(this, channel, callback, context),
          force        = (callback === true),
          hasSubscribe = this._channels.hasSubscription(channel);
  
      if (hasSubscribe && !force) {
        this._channels.subscribe([channel], callback, context);
        subscription.setDeferredStatus('succeeded');
        return subscription;
      }
  
      this.connect(function() {
        this.info('Client ? attempting to subscribe to ?', this._clientId, channel);
        if (!force) this._channels.subscribe([channel], callback, context);
  
        this._send({
          channel:      Faye.Channel.SUBSCRIBE,
          clientId:     this._clientId,
          subscription: channel
  
        }, function(response) {
          if (!response.successful) {
            subscription.setDeferredStatus('failed', Faye.Error.parse(response.error));
            return this._channels.unsubscribe(channel, callback, context);
          }
  
          var channels = [].concat(response.subscription);
          this.info('Subscription acknowledged for ? to ?', this._clientId, channels);
          subscription.setDeferredStatus('succeeded');
        }, this);
      }, this);
  
      return subscription;
    }