Implemente un protocolo personalizado TCP simple basado en Kotlin+Netty.
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.