NIO java 暂未完成。。。

来源:互联网 发布:莫达非尼淘宝 编辑:程序博客网 时间:2024/06/05 16:32

上一篇博客写了简单的socke。这里再说一下nio

Nio和socket相比,更加复杂一些

1、打开ServSocketChannel,用于监听客户端的连接,是所有客户端连接的父管道

ServerSocketChannel serverChannel=ServerSocketChannel.open();

2、绑定监听端口,设置连接为非阻塞模式。

serverChannel.configureBlocking(false);serverChannel.socket().bind(new InetSocketAddress(port));

3、创建Reactor线程,创建多路复用器并启动线程

selector=Selector.open();new Thread(new ReaciorTask()).start();

4、将ServerSocketChannel注册到Reactor线程的多路复用器Selector上,监听ACCETP事件。

SeletcionKey Key = serverChannel.register(selector,SleletionKey.OP_ACCEPT,ioHandler);

5、多路复用器在线程run方法的无限循环体内轮询准备就绪的key

int num=selector.select();Set selectorKeys=selector.selectedKeys();Iterator it=selectedKeys.iterator();while(it.hasNext()) { SelectionKey key=(SlectionKey)it.next(): //deal with IO event;

6、多路复用器监听到有新的客户端接入,处理新的接入请求,完成TCP三次握手,建立物理链路、

SocketChannel channel= serverChannel.accept();

7、设置客户端链路为非阻塞模式

8、将新接入的客户端连接注册到Reactor线程的多路复用器上,监听读操作用来读取客户端发送的网络消息。

9、异步读取客户端请求到消息缓冲区。

10、对ByteBuffr进行编码,如果有半包消息指针reset,继续读取后续包围

暂未完成。。。

0 0
原创粉丝点击