nio做客户端是否是bug????在线等

05-01-13 天龙工作室

客户端事件处理线程代码如下:

while (!bStop) {
      try {
        int n = selector.select();

        // 如果要shutdown,关闭selector退出
        if (bStop) {
          selector.close();
          break;
        }

        // 如果select返回大于0,处理事件
        if (n > 0) {
          for (Iterator i = selector.selectedKeys().iterator(); i.hasNext(); ) {
            // 得到下一个Key
            SelectionKey sk = (SelectionKey) i.next();
            i.remove();

            // 处理
            if (sk.isConnectable()) {
              this.event.processConnect(sk);              
            }
            else if (sk.isReadable()) {
              this.event.processRead(sk);
              sk.cancel();
            }
            else if (sk.isWritable()) {
              this.event.processWrite(sk);
              sk.cancel();
            }
          }
        }
        else {
          //?????注册write后,不停的执行
        }
      }
      catch (IOException e) {
        log.error(e.getMessage());
        this.event.processError(e);
      }
      catch (Exception e) {
        log.error("数据处理错误: " + e.getMessage());
      }
    }
    log.debug("nio监听线程已经退出");
  }
<p>

代码流程如上,当我注册write时,selector不停的返回0,这是否是个bug,我觉得如果有在连接或当selector返回值为0时注册一个write,就只有当我write时,事件才会触发,这是不是nio的一个bug

banq
2005-01-20 13:44

感觉写法有问题,参考我的书籍第一章,NIO这东东很怪,调用语法我发现有编写定式,不是随意发挥的。

csmcn
2005-01-26 14:18

a

天龙工作室
2005-01-27 10:13

老大哥,你的什么书啊,有没电子版的?我这没有卖的,给我讲讲你的书都有那些可看的,看我需不需要啊,对了,你不觉着奇怪吗?回答个问题以书来引用,你也够有意思的了!NIO的文章看了很多,但客户端编写就是没有符合我要求的,你要是知道就帖出来吧,不知道就算了,什么书不书的,我这没有!!!

zhaoxf
2005-03-04 11:06

developerWorks上好像有一篇讲nio的,里面有例子,我试过了,没问题

2Go 1 2 下一页