nio做客戶端是否是bug????線上等

天龍工作室發表於2005-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 class="indent">

程式碼流程如上,當我註冊write時,selector不停的返回0,這是否是個bug,我覺得如果有在連線或當selector返回值為0時註冊一個write,就只有當我write時,事件才會觸發,這是不是nio的一個bug

相關文章