gpt4 book ai didi

android - Android 上的 grpc 服务器

转载 作者:太空狗 更新时间:2023-10-29 14:46:48 27 4
gpt4 key购买 nike

我正在尝试在提供者和消费者进程之间建立一个与平台无关的通信 channel 。发现 grpc + protobuf 是一个不错的选择。

是否有在 Android 上运行的 GRPC 服务器(Java/C++)的示例或实现?我正在按照 grpc java 服务器示例来实现服务器 i

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

一直报错

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

谢谢

最佳答案

Android 上的 Netty 服务器实际上不受支持。 Android 的垃圾收集器和 NIO 支持对于良好的 Netty 性能来说都太差了。还有一些东西不太可能起作用,比如 TLS。如果它只是为了在最新的 Android 版本上进行测试,它可能大部分都可以工作,但不能保证它现在可以工作或将来继续工作。

考虑到这一点,请确保您对 grpc-netty 有依赖性,并尝试在没有 ProGuard 的情况下进行测试。 ProGuard 的重命名和剥离都会带来麻烦;您需要在 ProGuard 规则中使用 -keepnames io.grpc.ServerProvider-keep io.grpc.netty.NettyServerProvider,例如 was done for client-side .

另一种选择是 C++。客户端已经在 Android 上使用了,如果你让客户端工作,我希望服务器端能够运行。但我也不太了解 C++ 实现。

关于android - Android 上的 grpc 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com