你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
用Java实现非阻塞的HTTP服务器(九)
 

 /*

   * 如果原缓冲区的剩余容量不够,就创建一个新的缓冲区,容量为原来的两倍,

   * 把原来缓冲区的数据拷贝到新缓冲区

   */

  protected void resizeRequestBuffer(int remaining) {

    if (requestBuffer.remaining() < remaining) {

      // 把容量增大到原来的两倍

      ByteBuffer bb = ByteBuffer.allocate(requestBuffer.capacity() * 2);

      requestBuffer.flip();

      bb.put(requestBuffer);  //把原来缓冲区中的数据拷贝到新的缓冲区

      requestBuffer = bb;

    }

  }

 

  /*

   * 接收数据,把它们存放到requestBuffer中,如果requsetBuffer的剩余容量不足5%

   * 就通过resizeRequestBuffer()方法扩充容量

   */

  public int read() throws IOException {

    resizeRequestBuffer(requestBufferSize/20);

    return socketChannel.read(requestBuffer);

  }

 

  /* 返回requestBuffer,它存放了请求数据  */

  public ByteBuffer getReadBuf() {

      return requestBuffer;

  }

 

  /* 发送参数指定的ByteBuffer中的数据 */

  public int write(ByteBuffer src) throws IOException {

    return socketChannel.write(src);

  }

 

  /* FileChannel中的数据写到SocketChannel */

  public long transferTo(FileChannel fc, long pos, long len) throws IOException {

    return fc.transferTo(pos, len, socketChannel);

  }

 

  /*  关闭SocketChannel  */

  public void close() throws IOException {

    socketChannel.close();

  }

}

3.负责处理各种事件的Handler接口

Handler接口负责处理各种事件,它的定义如下:

import java.io.*;

import java.nio.channels.*;

public interface Handler {

  public void handle(SelectionKey key) throws IOException;

}

Handler接口有两个实现类:AcceptHandlerRequestHandlerAcceptHandler负责处理接收连结就绪事件,RequestHandler负责处理读就绪和写就绪事件。更确切地说,RequestHandler负责接收客户的HTTP请求,以及发送HTTP响应。

  推荐精品文章

·2022年10月目录 
·2022年9月目录 
·2022年8月目录 
·2022年7月目录 
·2022年6月目录 
·2022年5月目录 
·2022年4月目录 
·2022年3月目录 
·2022年2月目录 
·2022年1月目录 
·2021年12月目录 
·2021年11月目录 
·2021年10月目录 
·2021年9月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089