channel
channel分为serverSocketChannel和socketChannel;前者是server创建的让client来连接的标识;后者是client端创建;一个完整的链路可以理解为
server端存在:一个serverSocketChannel和一个socketChannel;
client端存在:一个与server端的socketChannel相通的socketChannel
serverSocketChannel:只可以接收client的连接(accept),不可以读写或connect
server端的socketChannel:可以读写
client端的socketChannel:可以连接server端的serverSocketChannel(connect),读写
client端的socketChannel连接状态
connect(server_address):发起到server的非阻塞连接(返回false),之后进入connectionPending状态,isconnectionPending方法为true
若要完成连接,需调用finishConnect方法;此时isConnected方法才为true,isconnectionPending方法为false
selector
注册了serverSocketChannel和socketChannel
通过selectionKey与channel建立关系;
每个selectionKey维持两个set:channel干感兴趣的事件set和感兴趣且发生变更的事件set