初窥java网络io

12
初窥 Java 网络 IO DigitalSonic 2011-10

Upload: digitalsonic

Post on 17-Jul-2015

753 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: 初窥Java网络IO

初窥 Java 网络 IO

DigitalSonic2011-10

Page 2: 初窥Java网络IO

同步?异步?阻塞?非阻塞?

UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking

Page 3: 初窥Java网络IO

IO in Java

● JDK 1.4 —— NIO● 我们有了 Non-Blocking IO

● JDK 1.7—— NIO2● 我们有了 Asynchronous IO● Linux下通过 epoll模拟实现● Windows下通过 IOCP实现

Page 4: 初窥Java网络IO

传统 Socket服务器实现方式

● 用 ServerSocket绑定某个端口● 循环 accept

● 开启一个新线程处理 Socket● 处理完毕后关闭 Socket

Page 5: 初窥Java网络IO

NIO – How To

● 非阻塞 ServerSocketChannel绑定端口● 注册选择器● 循环 select

● 处理 select的结果 key● 处理完毕移除 key

Page 6: 初窥Java网络IO

NIO范例

Page 7: 初窥Java网络IO

NIO范例

Page 8: 初窥Java网络IO

AIO – How To

● 配置线程池● AsynchronousServerSocketChannel绑定端口● accept

● 返回 Future做进一步处理● 设定 CompletionHandler,在其中做进一步处理

Page 9: 初窥Java网络IO

AIO范例

Page 10: 初窥Java网络IO

AIO范例

Page 11: 初窥Java网络IO

AIO范例

Page 12: 初窥Java网络IO

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