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) { } }); }