Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo configurar un proxy de comunicación de red para programas JAVA NIO o Netty?

¿Cómo configurar un proxy de comunicación de red para programas JAVA NIO o Netty?

Servidor de red informática

//Configura un controlador para arrancar. setpipelinefactory(newchannelpipelinefactory(){ @override publipchannelpipeline get pipeline()) maneja mensajes de clientes y varios eventos de mensajes. lanza una excepción {canales de retorno. (nuevo decodificador de objetos (resolutores de clase. caché deshabilitado (this. getClass(). getClassLoader())), newObjectServerHandler() }}); >

//Establezca un controlador para manejar mensajes del lado del servidor y varios eventos de mensajes.

bootstrap . setpipelinefactory(newChannelPipelineFactory(){ @ Anular publicChannelPipeline get pipeline() lanza excepción { return canales . pipeline(new object encoder(), newObjectClientHandler()); }}); p>Para pasar un objeto, naturalmente debe haber un modelo pasado y un Pojo simple. Por supuesto, es necesario implementar la interfaz de serialización.

/* * * * @authorlihzh * @alia OneCoder * @ blog */la implementación del comando de clase pública se puede serializar { privatestaticfinallonserialversionuid = 759099461767050471L privateString actionNamepublic string getaction name(){ return action name;} publicvidsetactionname ( String actionName){ this . actionName = actionName;}}

En el servidor y el cliente, nuestro controlador personalizado se implementa de la siguiente manera:

ObjectServerHandler. Lenguaje Java (un lenguaje informático, especialmente utilizado para crear sitios web)

/* * *Código del servidor de entrega de objetos* * @ Authorlihzh * @ aliaonecoder * @ blog */public class objecterverhandler extensionsimplemechannelhandler {/* * * Trigger */@ Anular publicvidmessagererecibido (ChannelHandlerContextCTX, Evento de mensaje E) lanza una excepción { comando comando =(comando)E . // Imprime para ver si es el sistema. out.println(command.getactionname() que acabamos de enviar;}}

ObjectClientHandler.

Lenguaje Java (un lenguaje informático, especialmente utilizado para crear sitios web)

/* * *Transferencia de objetos, código de cliente* * @ Authorlihzh * @ aliaonecoder * @ blog */public class objectclienthandler extensionally SimpleChannel Handler { /* * *Se activa cuando se vincula al servidor y envía un mensaje al servidor. * * @ autor lihzh * @ alia one coder */@ Anular publicvidchannelconnected(ChannelHandlerContext CTX, ChannelStateEvent e) {//Enviar información del objeto al servidor Enviar objeto(e. get channel());}/* * * Enviar objeto * * @ canal param * @ autor lihzh * @ aliaonecoder */private void Enviar objeto(canal de canal){ comando comando = nuevo comando(); setactionname("Hola acción.");

Después de iniciar, el servidor generalmente imprime el resultado: Hola acción.

Un breve resumen de las ideas:

Netty debe tener la forma de un ChannelBuffer basado en transmisiones. Entonces, objeto -> búfer de canal.

Netty proporciona una herramienta de conversión que requiere que configuremos el controlador.

Ejemplo del cliente --> El servidor envía mensajes unidireccional, por lo que la codificación se configura en el cliente y se decodifica en el servidor. Si envía y recibe en ambas direcciones, debe configurar el codificador y el decodificador.

Cabe señalar aquí que los controladores registrados en el servidor están en orden. Si el orden de registro se invierte:

bootstrap . setpipelinefactory(newChannelPipelineFactory(){

@ Anular publicChannelPipeline get pipeline() lanza una excepción { return canales . pipeline(newObjectServerHandler(), newObjectDecoder( solucionadores de clases .cache deshabilitado(this.getClass().get class loader())));}});

De esta manera, primero ingresamos a nuestro propio negocio y luego decodificamos. Naturalmente, esto no funcionará y conducirá al fracaso. En este punto, deberías poder usar Netty para pasar objetos.