@Override
    public ResponseFuture asyncInvoke(SofaRequest sofaRequest, int timeout) throws Exception {
        SofaResponseCallback sofaResponseCallback = sofaRequest.getSofaResponseCallback();
        TripleResponseFuture future = new TripleResponseFuture(sofaRequest, timeout);

        ClassLoader currentClassLoader = ClassLoaderUtils.getCurrentClassLoader();
        RpcInternalContext context = RpcInternalContext.getContext();

        if (!useGeneric) {
            Method m = methodMap.get(sofaRequest.getMethodName());
            if (m == null) {
                synchronized (this) {
                    m = methodMap.get(sofaRequest.getMethodName());
                    if (m == null) {
                        Class<?> clazz = Class.forName(sofaRequest.getInterfaceName());
                        Method[] declaredMethods = clazz.getDeclaredMethods();
                        for (Method tempM : declaredMethods) {
                            if (StringUtils.equals(tempM.getName(), sofaRequest.getMethodName()) && tempM.getParameterCount() == 2
                                    && StringUtils.equals(tempM.getParameterTypes()[1].getCanonicalName(), StreamObserver.class.getCanonicalName())) {
                                m = tempM;
                                methodMap.put(sofaRequest.getMethodName(), m);
                                break;
                            }
                        }
                    }
                }
            }
            Object stub = sofaStub.invoke(null, channel, buildCustomCallOptions(sofaRequest, timeout), timeout);
            m.invoke(stub, sofaRequest.getMethodArgs()[0], new StreamObserver<Object>() {
                @Override
                public void onNext(Object o) {
                    processSuccess(false, context, sofaRequest, o, sofaResponseCallback, future, currentClassLoader);
                }

                @Override
                public void onError(Throwable throwable) {
                    processError(context, sofaRequest, throwable, sofaResponseCallback, future, currentClassLoader);
                }

                @Override
                public void onCompleted() {

                }
            });
        } else {
            MethodDescriptor methodDescriptor = getMethodDescriptor(sofaRequest);
            Request request = SofaProtoUtils.buildRequest(sofaRequest.getMethodArgSigs(), sofaRequest.getMethodArgs(), serialization, serializer, 0);
            ClientCalls.asyncUnaryCall(channel.newCall(methodDescriptor, buildCustomCallOptions(sofaRequest, timeout)), request, new StreamObserver<Object>() {
                @Override
                public void onNext(Object o) {
                    processSuccess(true, context, sofaRequest, o, sofaResponseCallback, future, currentClassLoader);
                }

                @Override
                public void onError(Throwable throwable) {
                    processError(context, sofaRequest, throwable, sofaResponseCallback, future, currentClassLoader);
                }

                @Override
                public void onCompleted() {

                }
            });
        }
        return future;
    }
Build arg sigs for stream calls.

@param requestArgs request args
@return arg sigs, arg.getClass().getName().
remoting/remoting-triple/src/main/java/com/alipay/sofa/rpc/transport/triple/TripleClientInvoker.java