Wie soll ich AsynchronousServerSocketChannel für die Annahme von verbindungen?

Möchte ich schreiben, eine asynchrone server mit Java 7 und NIO 2.

Aber wie soll ich AsynchronousServerSocketChannel?

E. g. wenn ich starte mit:

final AsynchronousServerSocketChannel server = 
    AsynchronousServerSocketChannel.open().bind(
        new InetSocketAddress(port));

Dann, wenn ich server.accept() das Programm beendet da dieser Aufruf ist asynchrone. Und wenn ich den code in einer Endlosschleife, ein AcceptPendingException geworfen wird.

Irgendwelche Vorschläge auf, wie man eine einfache asynchrone server mit AsynchronousServerSocketChannel?

Hier mein vollständiges Beispiel (ähnlich wie das Beispiel in der JavaDoc):

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;

public class AsyncServer {

    public static void main(String[] args) {
        int port = 8060;
        try {
            final AsynchronousServerSocketChannel server = 
                    AsynchronousServerSocketChannel.open().bind(
                            new InetSocketAddress(port));

            System.out.println("Server listening on " + port);

            server.accept("Client connection", 
                    new CompletionHandler<AsynchronousSocketChannel, Object>() {
                public void completed(AsynchronousSocketChannel ch, Object att) {
                    System.out.println("Accepted a connection");

                    //accept the next connection
                    server.accept("Client connection", this);

                    //handle this connection
                    //TODO handle(ch);
                }

                public void failed(Throwable exc, Object att) {
                    System.out.println("Failed to accept connection");
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • Sie können Netty-framework, das speziell für client-server-Anwendung. Es verwendet auch java NIO. Es ist eine einfache und schnelle Entwicklung von server. gehen Sie über netty.io
  • Ich weiß, über netty, das ist aber nicht relevant für diese Frage.
InformationsquelleAutor Jonas | 2012-01-20
Schreibe einen Kommentar