una redes eliminar domestica configuraciones conexiones conexion como borrar java asynchronous network-programming nio netty

java - redes - eliminar conexiones de red windows xp



¿Cómo funciona el modelo de subprocesamiento Netty en el caso de muchas conexiones de clientes? (3)

No estoy seguro de que tu pregunta haya sido respondida. Aquí está mi respuesta: hay un único hilo de Boss que gestiona simultáneamente todos los CONNECT pendientes en su aplicación. Utiliza nio para procesar todos los enlaces actuales en una sola hebra (Boss), y luego pasa cada canal conectado con éxito a uno de los trabajadores.

Tengo la intención de usar Netty en un próximo proyecto. Este proyecto actuará como cliente y servidor. Especialmente establecerá y mantendrá muchas conexiones a varios servidores mientras que al mismo tiempo sirve a sus propios clientes.

Ahora, la documentación de NioServerSocketChannelFactory especifica bastante bien el modelo de subprocesamiento para el lado del servidor: cada puerto de escucha encuadernado requerirá un hilo de jefe dedicado durante todo el proceso, mientras que los clientes conectados se manejarán de forma no bloqueante en los subprocesos de trabajo . Específicamente, un hilo de trabajo será capaz de manejar múltiples clientes conectados.

Sin embargo, la documentación de NioClientSocketChannelFactory es menos específica. Esto también parece utilizar tanto el jefe como los hilos del trabajador . Sin embargo, la documentación dice:

Un NioClientSocketChannelFactory tiene un hilo de jefe. Hace un intento de conexión a petición. Una vez que un intento de conexión tiene éxito, el hilo jefe pasa el Canal conectado a uno de los hilos de trabajo que maneja NioClientSocketChannelFactory.

Los hilos de trabajo parecen funcionar de la misma manera que para el caso del servidor.

Mi pregunta es, ¿significa esto que habrá un hilo de jefe dedicado para cada conexión de mi programa a un servidor externo? ¿Cómo va esta escala si establezco cientos o miles de tales conexiones?

Como nota al margen. ¿Hay algún efecto secundario adverso para reutilizar un único ejecutor (grupo de subprocesos en caché) como jefe fiscal y trabajador fiscal de ChannelFactory? ¿Qué pasa con la reutilización entre diferentes instancias de ChannelFactory de cliente y / o servidor? Esto se discute algo aquí , pero no encuentro esas respuestas lo suficientemente específicas. ¿Podría alguien explicar esto?


Su pregunta se refiere principalmente al rendimiento. Los subprocesos individuales se escalan muy bien en el cliente.

Oh, y Nabble ha sido cerrado. Todavía puede navegar por el archivo allí.


Esta no es una respuesta real a su pregunta sobre cómo funciona el modelo de hilos del cliente Netty. Pero puede usar el mismo NioClientSocketChannelFactory para crear un solo ClientBootstrap con múltiples ChannelPipelineFactory s, y a su vez hacer una gran cantidad de conexiones. Echa un vistazo al ejemplo a continuación.

public static void main(String[] args) { String host = "localhost"; int port = 8090; ChannelFactory factory = new NioClientSocketChannelFactory(Executors .newCachedThreadPool(), Executors.newCachedThreadPool()); MyHandler handler1 = new MyHandler(); PipelineFactory factory1 = new PipelineFactory(handler1); AnotherHandler handler2 = new AnotherHandler(); PipelineFactory factory2 = new PipelineFactory(handler2); ClientBootstrap bootstrap = new ClientBootstrap(factory); // At client side option is tcpNoDelay and at server child.tcpNoDelay bootstrap.setOption("tcpNoDelay", true); bootstrap.setOption("keepAlive", true); for (int i = 1; i<=50;i++){ if(i%2==0){ bootstrap.setPipelineFactory(factory1); }else{ bootstrap.setPipelineFactory(factory2); } ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port)); future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { future.getChannel().write("SUCCESS"); } }); } }

También muestra cómo se pueden establecer diferentes fábricas de tuberías para diferentes conexiones, de modo que, según la conexión que realice, puede modificar sus codificadores / decodificadores en la canalización de canales.