Red de conocimiento informático - Material del sitio web - Implemente un protocolo personalizado TCP simple basado en Kotlin+Netty.

Implemente un protocolo personalizado TCP simple basado en Kotlin+Netty.

Nuestro proyecto requiere el desarrollo de un hardware inteligente. Envía instrucciones desde el fondo web a la aplicación de escritorio, y luego la aplicación de escritorio controla diferentes dispositivos de hardware para implementar operaciones comerciales. Desde el fondo web hasta el escritorio, se mantiene un enlace largo WebSocket y el programa de escritorio también se mantiene mediante un enlace largo TCP a cada dispositivo de hardware.

Este artículo trata en realidad sobre la comunicación entre programas de escritorio y diversos hardware.

Primero, necesitamos diseñar un protocolo de red TCP universal.

La estructura del protocolo de red es la siguiente

Según el protocolo de red diseñado anteriormente, se define un paquete de clases abstractas:

Necesita definir tantos paquetes como sea posible como instrucciones. Tomemos el paquete de latidos como ejemplo para definir un paquete de latidos:

HeartBeatPacket es iniciado por el cliente TCP, recibido por el servidor TCP y devuelto al cliente.

Cada clase de paquete contiene métodos de serialización utilizados por el paquete.

Cada paquete también contiene los comandos correspondientes. A continuación se muestran los comandos, un conjunto de instrucciones que admite 256 instrucciones.

Debido a que se utiliza un protocolo definido por el usuario, los mensajes deben codificarse y decodificarse, y PacketManager es responsable de estas cosas.

Al codificar, el mensaje se ensambla según la estructura del protocolo. Asimismo, la codificación es el proceso inverso.

Método para iniciar el servicio TCP

Entre ellos, ServerIdleHandler: significa que si no se recibe el latido dentro de 5 minutos, la conexión se desconectará.

MagicNumValidator: Número mágico utilizado para comprobar mensajes TCP.

PacketCodecHandler: el controlador para analizar mensajes.

PacketCodecHandler hereda de ByteToMessageCodec y se utiliza para procesar byte a mensaje y mensaje a byte, decodificando convenientemente mensajes de bytes en POJO o codificando mensajes POJO en bytes.

Controlador de latidos: el controlador de latidos recibe el "ping" del cliente TCP y luego devuelve "pong" al cliente.

ResponseHandler: un controlador general para recibir instrucciones del cliente TCP. Puede consultar el controlador correspondiente de acuerdo con las instrucciones correspondientes y procesar sus comandos.

Implementación de cliente simulado

Entre ellos, PacketCodecHandler es el mismo que el controlador utilizado por el servidor para analizar mensajes.

ClientIdleHandler: el cliente implementa un latido y envía un latido cada 30 segundos.

ClientLogin: Controlador del servidor de inicio de sesión.

El programa de escritorio que desarrollé esta vez no es lógicamente complejo. Solo necesito recibir instrucciones del backend web e interactuar con varios dispositivos.

Después de recibir la instrucción de la Web, se envía a varios dispositivos a través del EventBus y TCP de Guava. Debe convertirse en los paquetes de datos correspondientes al enviar. Entonces, el módulo principal es este protocolo personalizado TCP.