private void dispatch() throws IOException {
    SelectionKey key = null;
    for (SocketChannelOPSChangeRequest request : opsChangeRequstMap.values()) {
      key = request.getChannel().keyFor(selector);
      if (key != null) {
        // 写优先
        if ((request.getOps() & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) {
          key.interestOps(SelectionKey.OP_WRITE);
          request.clearOps(SelectionKey.OP_WRITE);
        } else if ((request.getOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
          key.interestOps(SelectionKey.OP_READ);
          request.clearOps(SelectionKey.OP_READ);
        }
      }
    }

    isWeakuped.set(false);
    if (selector.select(WaveriderConfig.WAVERIDER_DEFAULT_NETWORK_TIME_OUT) <= 0) {
      return;
    }

    Iterator<SelectionKey> iterator = selector.selectedKeys().iterator();
    while (iterator.hasNext()) {
      key = (SelectionKey) iterator.next();
      iterator.remove();
      try {
        if (!key.isValid()) {
          continue;
        } else if (key.isAcceptable()) {
          onAccept(key);
        } else if (key.isReadable()) {
          // readerExecutor.execute(new NetworkTask(key, NETWORK_OPERATION_READ));
          onRead(key);
        } else if (key.isWritable()) {
          // writerExecutor.execute(new NetworkTask(key, NETWORK_OPERATION_WRITE));
          onWrite(key);
        }
      } catch (IOException e) {
        // 客户端连接出问题
        Session session = (Session) key.attachment();
        if (session != null) {
          session.onException();
          // 释放Session
          sessionManager.freeSession(session);
        }
        opsChangeRequstMap.remove((SocketChannel) key.channel());
        key.cancel();
        key.channel().close();
        e.printStackTrace();
        logger.error("OOPS:Exception:", e);
      }
    }
  }
 @Override
 public void run() {
   try {
     switch (operation) {
       case NETWORK_OPERATION_ACCEPT:
         {
           onAccept(key);
           break;
         }
       case NETWORK_OPERATION_READ:
         {
           onRead(key);
           break;
         }
       case NETWORK_OPERATION_WRITE:
         {
           onWrite(key);
           break;
         }
     }
   } catch (IOException e) {
     logger.error("OOPS:Exception:", e);
     try {
       // 客户端连接出问题
       Session session = (Session) key.attachment();
       if (session != null) {
         session.onException();
         // 释放Session
         sessionManager.freeSession(session);
       }
       opsChangeRequstMap.remove((SocketChannel) key.channel());
       key.cancel();
       key.channel().close();
     } catch (IOException ex) {
       logger.error("OOPS:Exception:", ex);
       ex.printStackTrace();
     }
   }
 }