Java使用NioSocket手动实现HTTP服务器-创新互联
                                            NioSocket简单复习

重要概念
NioSocket里面的三个重要概念:Buffer、Channel、Selector
- Buffer为要传输的数据
- Channel为传输数据的通道
- Selector为通道的分配调度者
使用步骤
使用NioSocket实现通信大概如以下步骤:
- ServerSocketChannel可以通过configureBlocking方法来设置是否采用阻塞模式,设置为false后就可以调用register注册Selector,阻塞模式下不可以用Selector。
- 注册后,Selector就可以通过select()来等待请求,通过参数设置等待时长,若传入参数0或者不传入参数,将会采用阻塞模式直到有请求出现。
- 接收到请求后Selector调用selectedKeys方法,返回SelectedKey集合。
- SelectedKey保存了处理当前请求的Channel和Selector,并提供了不同的操作类型。四种操作属性:SelectedKey.OP_ACCEPT、SelectedKey.OP_CONNECT、SelectedKey.OP_READ、SelectedKey.OP_WRITE。
- 通过SelectedKey的isAcceptable、isConnectable、isReadable和isWritable来判断操作类型,并处理相应操作。
- 在相应的Handler中提取SelectedKey中的Channel和Buffer信息并执行相应操作。
 
实现HTTP
创建HttpServer类作为程序的主要入口
public class HttpServer {
  public static void main(String[] args) throws Exception{
    ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
    serverSocketChannel.socket().bind(new InetSocketAddress((8080)));
    serverSocketChannel.configureBlocking(false);
    Selector selector = Selector.open();
    // It must be ACCEPT, or it will throw exception
    serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
    while(true){
      if (selector.select(3000) == 0){
        continue;
      }
      Iterator keyIter = selector.selectedKeys().iterator();
      while (keyIter.hasNext()){
        SelectionKey key = keyIter.next();
        new Thread(new HttpHandler(key)).run();
        keyIter.remove();
      }
    }
  }
}
                                                 名称栏目:Java使用NioSocket手动实现HTTP服务器-创新互联
文章分享:http://www.scyingshan.cn/article/dpcihg.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 