es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Servidor gRPC Netty en Android – el canal no está registrado en un bucle de eventos.

Al ejecutar el servidor Netty gRPC en Android, obtengo la siguiente excepción:

java.lang.IllegalStateException: channel not registered to an event loop

Las dependencias que uso son:

implementation 'io.grpc:grpc-kotlin-stub:1.2.0'
implementation 'io.grpc:grpc-netty-shaded:1.40.1'
implementation 'io.grpc:grpc-stub:1.40.1'
implementation 'io.grpc:grpc-protobuf-lite:1.40.1'
implementation 'io.grpc:grpc-okhttp:1.40.1'
implementation 'com.google.protobuf:protobuf-kotlin-lite:3.18.1'

Inicializo el servidor gRPC de esta manera:

NettyServerBuilder.forPort(7001)
    .addService(Service())
    .build()
    .start()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    La excepción java.lang.IllegalStateException: channel not registered to an event loop ocurre cuando el servidor gRPC de Netty en Android no está registrado correctamente con un bucle de eventos. Esto puede ocurrir cuando el servidor no se inicializa correctamente y no se especifica el bucle de eventos asociado con el canal utilizado por el servidor.

    Para solucionar este problema, puede registrar el servidor con el bucle de eventos de Android pasando una instancia de AndroidEventLoopGroup al generador de servidores. Por ejemplo:

    val eventLoopGroup: EventLoopGroup = AndroidEventLoopGroup()
    
    NettyServerBuilder
        .forPort(7001)
        .addService(service)
        .bossEventLoopGroup(eventLoopGroup)
        .workerEventLoopGroup(eventLoopGroup)
        .build()
        .start()
    

    Aquí creamos una instancia de AndroidEventLoopGroup, que es una subclase de NioEventLoopGroup, y la pasamos a los métodos bossEventLoopGroup y workerEventLoopGroup del generador de servidores. Esto asegura que el servidor está registrado en un bucle de eventos y debería solucionar la excepción.

Comments are closed.