Channel和Unsafe

实际的I/O读写操作都是由Unsafe接口负责完成的。

    bind方法主要用于绑定指定的端口,对于服务端,用于绑定监听端口,可以设置backlog参数;对于客户端,主要用于指定客户端Channel的本地绑定Socket地址。

    disconnect方法用于客户端或者服务器端主动关闭连接。

    close方法,在链路关闭之前需要首先判断是否处于刷新状态,如果处于刷新状态说明还有消息尚未发送出去,需要等到所有消息发送完成再关闭链路,因此,将关闭操作封装成Runnable稍后再执行。

    write方法实际上将消息添加到环形发送数组中,并不是真正的写Channel。如果Channel没有处于激活状态,说明TCP链路还没有真正建立成功,当前Channel存在以下两种状态。  

    (1)Channel打开,但是TCP链路尚未建立成功:NOT_YET_CONNECTED_EXCEPTION;

    (2)Channel已经关闭:CLOSE_CHANNEL_EXCEPTION.

如果链路状态正常,则将需要发送的msg和promise放入发送缓冲区中(环形数组)。

    flush方法负责将发送缓冲区中待发送的消息全部写入到Channel中,并发送给通信对方。


    connect方法:

        首先获取当前的连接状态进行缓存,然后发起连接操作,SocketChannel执行connect()操作有三种可能的结果:

            (1)连接成功,返回true;

            (2)暂时没有连接上,服务端没有返回ACK应答,连接结果不确定,返回false;

            (3)连接失败,直接抛出I/O异常。

        如果是第(2)种结果,需要将NioSocketChannel中的selectionKey设置为OP_CONNECT,监听连接应答消息。

      异步连接返回之后,需要判断连接结果,如果连接成功,则触发ChannelActive事件,ChannelActive事件最终会将NioSocketChannel中的selectionKey设置为SelectionKey.OP_READ,用于监听网络读操作位。

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值