docs: function(client, serviceName, methodName, args, attach, isToSpecifiedServer) {
    if (client.state !== STATE_STARTED) {
      logger.error('[omelo-rpc] fail to invoke rpc proxy for client is not running');
      return;
    }
    if (args.length < 2) {
      logger.error('[omelo-rpc] invalid rpc invoke, arguments length less than 2, namespace: %j, serverType, %j, serviceName: %j, methodName: %j',
        attach.namespace, attach.serverType, serviceName, methodName);
      return;
    }
    let routeParam = args.shift();
    let cb = args.pop();
    let serverType = attach.serverType;
    let msg = {
      namespace: attach.namespace,
      serverType: serverType,
      service: serviceName,
      method: methodName,
      args: args
    };
  
    if (isToSpecifiedServer) {
      rpcToSpecifiedServer(client, msg, serverType, routeParam, cb);
    } else {
      getRouteTarget(client, serverType, msg, routeParam, function(err, serverId) {
        if (err) {
          return cb(err);
        }
  
        client.rpcInvoke(serverId, msg, cb);
      });
    }
  }