在Android上使用gRPC

1.Hello

syntax = "proto3";

option java_multiple_files = true;

package hello;

service Hello {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

2.gRPCService

import hello.HelloGrpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

public class gRPCService {
    private static final String gRPC_HOST = "isilent.me";
    private static final int gRPC_PORT = 80;
    private static gRPCService instance;
    private ManagedChannel mChannel;

    public static gRPCService getInstance() {
        if (instance == null) {
            instance = new gRPCService();
        }
        return instance;
    }

    private gRPCService() {

    }

    /**
     * 获取Channel
     *
     * @return
     */
    private ManagedChannel getChannel() {
        if (mChannel == null || mChannel.isShutdown()) {
            // 设置最大接收消息大小为20M
            mChannel = ManagedChannelBuilder.forAddress(gRPC_HOST, gRPC_PORT).usePlaintext().maxInboundMessageSize(20 * 1024 * 1024).build();
        }
        return mChannel;
    }

    /**
     * 获取Hello存根
     *
     * @return
     */
    public HelloGrpc.HelloStub getHelloStub() {
        return HelloGrpc.newStub(getChannel());
    }
}

3.SimpleStreamObserver

import android.os.Handler;
import android.os.Looper;

import io.grpc.stub.StreamObserver;

public abstract class SimpleStreamObserver<T> implements StreamObserver<T> {
    private static Handler handler = new Handler(Looper.getMainLooper());

    @Override
    public void onCompleted() {

    }

    @Override
    public void onNext(final T value) {
        // 返回主线程
        handler.post(new Runnable() {
            @Override
            public void run() {
                onSuccess(value);
            }
        });
    }

    /**
     * 请求成功的回调
     *
     * @param value
     */
    protected abstract void onSuccess(T value);
}

4.Main

public static void Main() {
    HelloRequest request = HelloRequest.newBuilder().setName("hello").build();
    gRPCService.getInstance().getHelloStub().sayHello(request, new SimpleStreamObserver<HelloReply>() {
        @Override
        protected void onSuccess(HelloReply value) {
            System.out.println(value.getMessage());
        }

        @Override
        public void onError(Throwable t) {

        }
    });
}

发表评论