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

二、创建非阻塞的HTTP服务器

HTTP服务器的主要任务就是接收HTTP请求,然后发送HTTP响应。图4是本文所介绍的非阻塞的HTTP服务器的对象模型。


4  HTTP服务器的对象模型

在这个对象模型中,HttpServer类是服务器主程序,由它启动服务器。AcceptHandler负责接收客户连接,RequestHandler负责接收客户的HTTP请求,对其解析,然后生成相应的HTTP响应,再把它发送给客户。Request类表示HTTP请求,Response类表示HTTP响应,Content类表示HTTP响应的正文。

1.服务器主程序:HttpServer

HttpServer类是服务器的主程序,它仅启用了单个主线程,采用非阻塞模式来接收客户连结,以及收发数据。例程2HttpServer类的源程序:

//例程2  HttpServer.java

//此处省略import语句

public class HttpServer{

  private Selector selector = null;

  private ServerSocketChannel serverSocketChannel = null;

  private int port = 80;

  private Charset charset=Charset.forName("GBK");

 

  public HttpServer()throws IOException{

//创建SelectorServerSocketChannel

//ServerSocketChannel设置为非阻塞模式,绑定到80端口

  }

 

  public void service() throws IOException{

serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT, 

//注册接收连结就绪事件

new AcceptHandler());

    for(;;){

      int n = selector.select();

 

      if(n==0)continue;

      Set readyKeys = selector.selectedKeys();

      Iterator it = readyKeys.iterator();

      while (it.hasNext()){

        SelectionKey key=null;

        try{

            key = (SelectionKey) it.next();

            it.remove();

           final Handler handler = (Handler)key.attachment();

            handler.handle(key);  //Handler处理相关事件

        }catch(IOException e){

  推荐精品文章

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

  联系方式
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