Cuatro servicios del marco golang-GRPC
Los clientes y servidores de gRPC pueden ejecutarse e interactuar en una variedad de entornos, desde servidores dentro de Google hasta su propia computadora portátil, y pueden escribirse en cualquier idioma admitido por gRPC. Por lo tanto, puede crear fácilmente un servidor gRPC usando Java y clientes usando Go, Python y Ruby. Además, la última API de Google tendrá una versión gRPC de la interfaz para que pueda integrar fácilmente las funciones de Google en sus aplicaciones.
De forma predeterminada, gRPC utiliza buffers de protocolo, que es un mecanismo maduro de serialización de datos estructurados abierto por Google (por supuesto, también se pueden usar otros formatos de datos como JSON). Proto3 es un nuevo tipo de búfer de protocolo con una sintaxis liviana y simplificada, algunas características nuevas útiles y soporte para más lenguajes nuevos. Actualmente, se han lanzado versiones beta de Java y C ++, y se ha lanzado la versión alfa de Java nano (Android Java). La biblioteca de código fuente de Github con buffers de protocolo es compatible con Ruby, y la biblioteca de código fuente de golang/protobuf Github tiene un lenguaje Go. generador. Se está desarrollando soporte para más idiomas.
Con gRPC, podemos hacer esto de uno en uno. proto archivo e implementar clientes y servidores en cualquier idioma que lo admita. En cambio, se pueden utilizar en una variedad de entornos, desde los servidores de Google hasta su propia tableta: GRPC puede ayudarlo a resolver problemas complejos de comunicación entre diferentes idiomas y entornos. Otros beneficios del uso de buffers de protocolo incluyen números de secuencia eficientes, IDL simple y actualizaciones de interfaz sencillas.
Ahora echemos un vistazo más de cerca a lo que sucede cuando un cliente gRPC llama a un método en un servidor gRPC. No discutimos los detalles de implementación. Puede encontrar más detalles sobre los detalles de implementación en nuestras páginas específicas del idioma.
Primero, veamos la forma más simple de RPC: el cliente envía una única solicitud y obtiene una única respuesta.
El RPC de transmisión del lado del servidor es el mismo que nuestro ejemplo simple, excepto que devuelve un flujo de respuesta después de obtener la información de la solicitud del cliente. Después de enviar todas las respuestas, los detalles del estado del servidor (código de estado e información de estado opcional) y los metadatos de seguimiento opcionales se envían al cliente para completar el trabajo del servidor. El cliente también completa su trabajo después de recibir respuestas de todos los servidores.
El RPC de transmisión del lado del cliente es básicamente el mismo que nuestro ejemplo simple, excepto que el cliente envía un flujo de solicitudes al servidor en lugar de una única solicitud sin formato. El servidor normalmente (pero no necesariamente) envía una respuesta que contiene detalles de su estado y datos de seguimiento opcionales después de recibir todas las solicitudes del cliente.
RPC de flujo bidireccional, la llamada la inicia el cliente que llama al método y el servidor recibe los metadatos del cliente, el nombre del método y la fecha límite. El servidor puede optar por devolver sus metadatos iniciales o esperar a que el cliente envíe la solicitud. La forma de desarrollar el siguiente paso depende de la aplicación, ya que el cliente y el servidor pueden leer y escribir en cualquier orden; las operaciones de estos flujos son completamente independientes. Por ejemplo, el servidor puede esperar hasta haber recibido mensajes de todos los clientes antes de escribir una respuesta, o el servidor y los clientes pueden trabajar como "ping pong": después de que el servidor recibe la solicitud, envía una respuesta y luego el cliente envía otra solicitud basada en la respuesta, y así sucesivamente.
Clonar e instalar el código base de grpc-go ejecutando el siguiente comando:
Descargar el paquete fuente de protobuf
Instalar golang-protobuf
Capítulo Un paso es utilizar buffers de protocolo para definir los tipos de solicitudes y respuestas de métodos y servicios gRPC.
Para definir un servicio, este debe estar en formato . Archivo de prototipo:
Luego defina el método rpc en el servicio y especifique los tipos de solicitud y respuesta. gRPC permite definir cuatro tipos de métodos de servicio.
Servicio.
El archivo prototipo es el siguiente: