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