【网络编程】(五)NIO特点、实现客户端和服务端的单/双向通信

NIO的本质就是避免原始的TCP建立连接使用的3次握手的操作,减少网络开销。

NIO

    new IO 或 non-block IO

    jdk1.4出现

    linux 多路复用技术(select模式)  实现IO事件的轮询方式

    同步非阻塞的模式


重要的几个概念

Buffer 缓冲区

    在NIO库中,所有数据都是用缓冲区处理的

Channel管道

网络数据通过Channel读取和写入。

    分为两类:

        SelectableChannel网络读写。子类:

            SocketChannel

            ServerSocketChannel

        FileChannel文件读写。

    通道和流的对比。

        通道:双向的。既能读,又能写。

        流:只能在一个方向上移动。

Selector选择器、多路复用器

    当IO事件(Channel)注册到Selector后,Selector会给每个Channel分配一个key。

    不断的轮询注册在其上的通道Channel。如果某个Channel发生了读写操作,则这个Channel就处于就绪状态,被Selector轮询出来以后,然后通过SelectionKey取得就绪的Channel集合,并进行后续操作。

    一个Selector可以负责成千上万的Channel,没有上限[JDK使用epoll代替传统的select实现的],只需要一个线程负责Selector的轮询即可。



图示说明:

    1. Client端的SockerChannel注册到Server端的Selector上。

    2. Selector轮询所有的注册通道,根据通道状态[Connect连接状态、Accept阻塞状态、Read可读状态、Write可写状态],执行对应的操作。


举例一:实现客户端和服务端的单向通信。

Server.java

package com.asiainno.utils;


import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;

public class Server implemen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值