关于得到的SelectionKey有3个方法
isAcceptable 表示有个客户端的请求
isWritable 是不是表示channel中没有数据服务器可以写数据
isReadable  是不是表示channel中有客户端写进去的数据服务器可以读假如我要实现一个多个客户聊天的程序 ,比如一个客户发消息给多个客户 ,服务器端是用几个集合保存这些selectionkey还是
保存通过selectionkey.channel()返回的channel

解决方案 »

  1.   

    虽然用过,但是还是没搞明白.
    NIO貌似以注册的方式来提供通道.
    做之前还是看看api先,要不就像我样,做完了还是一知半解...
      

  2.   

    保存SocketChannel好点。就好像保存多个同时聊天的Socket一样, 一个用户发消息,找到相应容器下的所有socket之后群发。。
      

  3.   

    我的理解是
    对服务器端的ServerSocket注册  SelectionKey.OP_ACCEPT 关注是否有客户端的连接,
    然后循环调用selector.selectedKeys() 对返回的key 判断 
      1 如果是accpet 表示有新的连接 获得相应的channel 再注册  SelectionKey.OP_READ | SelectionKey.OP_WRITE  (关注可读 可写)
      2 如果write 就可以写数据
      3 如果是read 就读数据现在有几个问题 
      如果某次获得的一个key,调用key.interestOps(SelectionKey.OP_WRITE|SelectionKey.OP_READ),就是表示下次关注可读可写,下次再选择的时候,如果这个key对应的管道中有客户端写进的数据还没读出,这时候获得的key 的key.isReadable()返回ture ,那么这个key 的key.isWritable()是不是为false,就是说key对应的channel 要么可读要么可写,是吗?  还有我一直这样理解的,一个key对应一个channel,我们把key放在selector集合中,每次选择时只是获得的相应的引用,我们可以对key的引用使用interestOps关注管道相应的可读写事件,这样对吗?
      
      假如我上次对某个管道写了数据,但是客户端没读走相应的数据,下次还是可写的吗?