Tôi muốn viết một máy chủ không đồng bộ sử dụng Java 7 và NIO 2.Tôi nên sử dụng AsynchronousServerSocketChannel để chấp nhận kết nối như thế nào?
Nhưng làm cách nào tôi nên sử dụng AsynchronousServerSocketChannel
?
Ví dụ: nếu tôi bắt đầu với:
final AsynchronousServerSocketChannel server =
AsynchronousServerSocketChannel.open().bind(
new InetSocketAddress(port));
Sau đó, khi tôi làm server.accept()
, chương trình chấm dứt vì gọi đó là không đồng bộ. Và nếu tôi đặt mã đó trong một vòng lặp vô hạn, một số AcceptPendingException
sẽ bị ném.
Bất kỳ đề xuất nào về cách viết một máy chủ không đồng bộ đơn giản bằng cách sử dụng AsynchronousServerSocketChannel
?
Dưới đây là ví dụ của tôi đầy đủ (giống như ví dụ trong 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();
}
}
}
Bạn có thể sử dụng khung Netty đó là đặc biệt cho các ứng dụng client-server. Nó cũng sử dụng java NIO. Nó rất dễ dàng và nhanh chóng phát triển của máy chủ. đi qua http://netty.io/ –
@Optimus: Tôi biết về netty, nhưng điều đó không liên quan đến câu hỏi này. – Jonas