сервер grpc на Android

Я пытаюсь построить независимый от платформы канал связи между процессами поставщика и потребителя. Было обнаружено, что grpc + protobuf является хорошим вариантом.

Есть ли пример или реализация сервера GRPC (Java / C ++), работающего на Android? Я следую примеру java-сервера grpc для реализации сервера 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();

Спасибо


person Anil Maddala    schedule 31.08.2016    source источник


Ответы (1)


Сервер Netty на Android на самом деле не поддерживается. Сборщик мусора Android и поддержка NIO слишком плохи для хорошей производительности Netty. Также некоторые вещи вряд ли будут работать, например TLS. Если он предназначен только для тестирования на новейшей версии Android, он может в основном работать, но нет никаких гарантий, что он работает сейчас или продолжит работать в будущем.

Имея это в виду, убедитесь, что у вас есть зависимость от grpc-netty, и попробуйте без ProGuard в качестве теста. И переименование, и удаление ProGuard могут вызвать проблемы; вам понадобятся -keepnames io.grpc.ServerProvider и -keep io.grpc.netty.NettyServerProvider в правилах ProGuard, например было выполнено на стороне клиента.

C ++ в другом варианте. Клиентская сторона уже используется на Android, и я ожидаю, что серверная часть будет работать, если вы получите работу на стороне клиента. Но я также не так хорошо осведомлен о реализации C ++.

person Eric Anderson    schedule 07.09.2016
comment
Примечание. Команда Netty решила официально поддерживать Android netty.io/wiki/new-and-noteworthy-in-4.1.html#wiki-h3-3 - person Erwin; 07.12.2016
comment
Есть ли какой-нибудь пример того, как мы можем запустить сервер gRPC на Android, используя java или c ++? - person Abhishek; 14.08.2019