Как должен ли я использовать AsynchronousServerSocketChannel для приема подключений?

Я хотел бы написать асинхронный сервер с использованием Java 7 и NIO 2.

Но как мне использовать AsynchronousServerSocketChannel ?

Например. если я начинаю с:

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

Затем, когда я выполняю server.accept () , программа завершается , потому что этот вызов асинхронный . И если я помещаю этот код в бесконечный цикл, возникает исключение AcceptPendingException .

Любые предложения о том, как написать простой асинхронный сервер с использованием AsynchronousServerSocketChannel ?

Вот мой полный пример (похожий на пример в 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() {
                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();
        }
    }
}

19
задан Jonas 20 January 2012 в 11:31
поделиться