初窥java网络io
TRANSCRIPT
初窥 Java 网络 IO
DigitalSonic2011-10
同步?异步?阻塞?非阻塞?
UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking
IO in Java
● JDK 1.4 —— NIO● 我们有了 Non-Blocking IO
● JDK 1.7—— NIO2● 我们有了 Asynchronous IO● Linux下通过 epoll模拟实现● Windows下通过 IOCP实现
传统 Socket服务器实现方式
● 用 ServerSocket绑定某个端口● 循环 accept
● 开启一个新线程处理 Socket● 处理完毕后关闭 Socket
NIO – How To
● 非阻塞 ServerSocketChannel绑定端口● 注册选择器● 循环 select
● 处理 select的结果 key● 处理完毕移除 key
NIO范例
NIO范例
AIO – How To
● 配置线程池● AsynchronousServerSocketChannel绑定端口● accept
● 返回 Future做进一步处理● 设定 CompletionHandler,在其中做进一步处理
AIO范例
AIO范例
AIO范例
AIO范例
Start listening on 8888. sun.nio.ch.UnixAsynchronousServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8888]AsynchronousSocketChannel Accepted!sun.nio.ch.UnixAsynchronousSocketChannelImpl[connected local=/0:0:0:0:0:0:0:1:8888 remote=/0:0:0:0:0:0:0:1:48716]sun.nio.ch.UnixAsynchronousSocketChannelImpl[connected local=/0:0:0:0:0:0:0:1:8888 remote=/0:0:0:0:0:0:0:1:48716] said: abcsun.nio.ch.UnixAsynchronousSocketChannelImpl[connected local=/0:0:0:0:0:0:0:1:8888 remote=/0:0:0:0:0:0:0:1:48716] said: exit