NIO 编程

1. NIO 比 传统 IO 有什么优势?java

答:NIO 一个 线程 能够监听多个客户端,传统 客户端 -- 服务端模型中,一个线程监听一个客户端,致使线程消耗过多,一个线程要分配0.5M~1M内存。socket

2. NIO服务端客户端模型线程

// 建立一个selector
        Selector selector = Selector.open();
        // 建立一个ServerSocketChannel
        ServerSocketChannel servChannel = ServerSocketChannel.open();
        servChannel.configureBlocking(false);
        // 绑定端口号
        servChannel.socket().bind(new InetSocketAddress(8080), 1024);
        // 注册感兴趣事件
        servChannel.register(selector, SelectionKey.OP_ACCEPT);
        
        // select系统调用
        selector.select(1000);
        
        Set<SelectionKey> selectedKeys = selector.selectedKeys();
        Iterator<SelectionKey> it = selectedKeys.iterator();
        SelectionKey key = null;
        while (it.hasNext()) {
            key = it.next();
            it.remove();
            if (key.isValid()) {
                // 处理新接入的请求消息
                if (key.isAcceptable()) {
                    ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
                    // 接收客户端的链接,并建立一个SocketChannel
                    SocketChannel sc = ssc.accept(); 
                    sc.configureBlocking(false);
                    // 将SocketChannel和感兴趣事件注册到selector
                    sc.register(selector, SelectionKey.OP_READ); 
                }
                if (key.isReadable()) {
                    // 读数据的处理
                }
            }
        }

 

3. NIO 怎样使用?code

答:事件

(1)通道绑定端口内存

(2)服务端Channel/客户端Channel 注册事件到Selector上rem

(3)select方法阻塞,获取被选中的key,根据key找到channelit

相关文章
相关标签/搜索