tutorial sirve que para example ejemplos definicion java networking sockets asynchronous

sirve - Asincrónico IO en Java?



java.io.file example (6)

A la pregunta original, la implementación solo consume un subproceso por operación de E / S en un caso, AsynchronousFileChannel en sistemas Unix / Linux.

¿Qué opciones para async io (basado en socket) hay en java otra vez que java.nio? También java.nio utiliza hilos en el backround (como creo que async-socket-library de .NET, tal vez ha sido cambiado) o es "asincrónico" verdadero usando una llamada de selección apropiada?


El paquete NIO de Java (a partir de Java6), proporciona soporte solo para E / S sin bloqueo , a través de Selector s. Se espera que Java7 se envíe con NIO.2, que incluye soporte de E / S asíncronas. Hoy, tu mejor opción es hacer uso de un marco. ARMistice mencionó a Mina. Aquí hay algunos otros.

  1. Grizzly . Este es el núcleo de E / S para el servidor GlassFish de Sun. Grizzly proporciona una facilidad para realizar lecturas / escrituras asincrónicas (a través de un modelo de cola). Es compatible con TCP y UDP por igual. He usado Grizzly en un par de proyectos. Hay cosas que me gustan y las que no me gustan del marco, pero detallar esto es realmente otro tema. Diré que es bastante fácil poner en marcha algo y Grizzly hace mucho trabajo pesado por ti.
  2. Netty . Este proyecto proviene de uno de los autores originales del proyecto Mina. No he usado este, así que no sé sobre su soporte para E / S asincrónicas. Deberías echar un vistazo.

Ahora, con respecto a su pregunta sobre los hilos, los Selectores de NIO no usan hilos para E / S sin bloqueo. En JDK6 utilizan select () en Windows y la instalación epoll en kernels Linux más nuevos. Para E / S asíncrona, los detalles de subprocesamiento dependen del marco.


JAVA 7 llegó, por lo que la nueva respuesta es NIO.2 con clase Future. Ejemplo:

En el lado del servidor:

final AsynchronousServerSocketChannel serverSocket= AsynchronousServerSocketChannel.open().bind(new InetSocketAddress("127.0.0.1", 2587)); // Listening on port 2587 for client connection Future<AsynchronousSocketChannel> future= serverSocket.accept(); final AsynchronousSocketChannel clientSocket= future.get(); // now it''s blocking, useful: future.isDone() and .isCancelled() //Do whatever you want .. InputStream stream = Channels.newInputStream(clientSocket) (...)

En el lado del cliente:

AsynchronousSocketChannel clientChannel = AsynchronousSocketChannel.open(); Future connected = localSocket.connect(ourServerSocketAddress); // later: if(future.isDone()) connected.get(); //Send something OutputStream os = Channels.newOutputStream(clientChannel ); os.write (...)

Actualización: si puedes usar el modelo de actor, AKKA TCP IO sería aún mejor.


Otra sugerencia en cuanto a libs sería Naga ( http://naga.googlecode.com ). Es un poco menos como un marco y más como una biblioteca. Trata de parecerse más a las tomas de java ordinarias, si esa es tu taza de té. Es minimalista en comparación con Grizzly, Mina y Netty.


Si está interesado en usarlo para Network Stuff. Una muy buena opción es:

http://mina.apache.org/

Eche un vistazo allí es fácil de usar y muy poderoso.


java.nio es solo un paquete, una colección de clases "tontas", por sí solo no utiliza ningún uso de subprocesos. Cuando se usa correctamente, como en el patrón de diseño del Reactor , puede lograr E / S asíncronas, totalmente escalables y adecuadas.