2016-08-31 11 views
1

私はプロバイダと消費者プロセスの間にプラットフォームに依存しない通信チャネルを構築しようとしています。 grpc + protobufが良いオプションであることが判明しました。Androidのgrpcサーバー

Android上で動作するGRPCサーバー(Java/C++)の実装例はありますか? は私が

private class GrpcServerTask extends AsyncTask<Void, Void, String>{ 

    @Override 
    protected void onPreExecute() { 
    } 
    @Override 
    protected String doInBackground(Void... params) { 
     int port = 50051; 
     Server server; 
     try { 
      server = ServerBuilder.forPort(port) 
        .addService(new GreeterImpl()) 
        .build() 
        .start(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

private class GreeterImpl extends GreeterGrpc.GreeterImplBase { 

    @Override 
    public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) { 
     HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build(); 
     responseObserver.onNext(reply); 
     responseObserver.onCompleted(); 
    } 
} 

サーバーを実装するためにgrpcのJavaサーバーの例を以下の午前私はエラーに

io.grpc.ManagedChannelProvider$ProviderNotFoundException: No functional server found. Try adding a dependency on the grpc-netty artifact 
on executing new GrpcServerTask().execute(); 

おかげでAndroid上

答えて

0

ネッティーサーバーが実際にサポートされていないを取得しておきます。 AndroidのガベージコレクタとNIOサポートはどちらもあまりにも劣っているため、Nettyのパフォーマンスは良くありません。また、TLSのように、うまくいかないものもあります。最新のAndroidのリリースでテストするのであれば、ほとんどの場合動作するかもしれませんが、現在動作しているか、今後も動作することは保証されていません。

これを念頭において、grpc-nettyに依存していることを確認し、ProGuardをテストとして使用しないでください。 ProGuardの名前の変更と削除は両方とも問題を引き起こす可能性があります。 was done for client-sideのように、ProGuardルールに-keepnames io.grpc.ServerProvider-keep io.grpc.netty.NettyServerProviderが必要です。

別のオプションではC++。クライアント側はすでにAndroid上で使用されています。クライアント側の作業があれば、サーバ側が機能することを期待しています。しかし、私はC++実装についても認識していません。

+0

注:Nettyチームは、Android http://netty.io/wiki/new-and-noteworthy-in-4.1.html#wiki-h3-3を正式にサポートすることを決定しました – Erwin