async start (port, creds, options) {
    if (_.isObject(port)) {
      if (_.isObject(creds)) {
        options = creds
      }
      creds = port
      port = null
    }

    if (!port || typeof port !== 'string' || (typeof port === 'string' && port.length === 0)) {
      port = '127.0.0.1:0'
    }

    if (!creds || !_.isObject(creds)) {
      creds = this.grpc.ServerCredentials.createInsecure()
    }

    const server = new this.grpc.Server(options)

    server.tryShutdownAsync = util.promisify(server.tryShutdown)
    const bindAsync = util.promisify(server.bindAsync).bind(server)

    for (const sn in this.data) {
      const sd = this.data[sn]
      const handlerValues = Object.values(sd.handlers).filter(Boolean)
      const hasHandlers = handlerValues && handlerValues.length

      if (sd.handlers && hasHandlers) {
        const composed = {}

        for (const k in sd.handlers) {
          const v = sd.handlers[k]

          if (!v) { continue }

          const md = sd.methods[k]
          const shortComposedKey = md.originalName || _.camelCase(md.name)

          composed[shortComposedKey] = this.callback(sd.methods[k], v)
        }

        server.addService(sd.service, composed)
      }
    }

    const bound = await bindAsync(port, creds)
    if (!bound) {
      throw new Error(`Failed to bind to port: ${port}`)
    }

    this.ports.push(bound)

    server.start()
    this.servers.push({
      server,
      port
    })

    return server
  }
Start the service. All middleware and handlers have to be set up prior to calling <code>start</code>.
Throws in case we fail to bind to the given port.
@param {String} port - The hostport for the service. Default: <code>127.0.0.1:0</code>
@param {Object} creds - Credentials options. Default: <code>grpc.ServerCredentials.createInsecure()</code>
@param {Object} options - The start options to be passed to `grpc.Server` constructor.
@return {Promise<Object>} server - The <code>grpc.Server</code> instance
@example
app.start('localhost:50051')
@example <caption>Start same app on multiple ports</caption>
app.start('127.0.0.1:50050')
app.start('127.0.0.1:50051')