理解SelectionKey

选择器背后的基本概念是充当一个注册表,在那里可以请求在Channel的状态发生变化时得到通知。可能的状态变化有:

  1. 新的Channel已被接受并且就绪
  2. Channel链接已经完成
  3. Channel有已经就绪的可供读取的数据
  4. Channel可用于写数据

选择器运行在一个检查状态变化并对其作出响应的线程上,在应用程序对状态的改变作出响应之后,选择器将会被重置,并将重复这个过程(具体的细节不是很理解,我以为是一个While死循环)。

如下代表了有SelectionKey定义的位模式:

  • OP_ACCEPT:请求在接受新连接并创建Channel时获得通知

  • OP_CONNECT:请求在建立一个连接时获得通知

  • OP_READ:请求当数据已经就绪,可以从Channel中读取时获得通知

  • OP_WRITE:请求当可以向Channel中写更多的数据时获得通知。这处理了套接字缓冲区被完全填满时的情况,这种情况通常发生在数据的发送速度比远程节点可处理的速度更快的时候