使用ExcutorService管理的web服务器结构

本文介绍了一个简单的Web服务器框架实现,采用线程池处理客户端请求,支持通过特定请求关闭服务器。服务器通过构造函数指定端口及线程池大小,并提供启动方法。

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
* 一个简单服务器的基本框架,使用线程池来处理请求
* 可以通过stop方法来关闭,也可以使用发送关闭请求来关闭。
* @author 王法波
* @version 1.0
*/
public class LifecycleWebServer {

/**
* 线程池
*/
private final ExecutorService exec;
/**
* 服务器socket
*/
private final ServerSocket ss;

/**
* 内部类Request,在框架中用来封装用户的请求,未实现
*/
class Request {
}

/**
* 构造函数,可以通过参数来指定服务器端口和线程池大小
*
* @param port      服务器端口
* @param poolsize 线程池大小
* throw IOException 建立ServerSocket失败的时候回抛出该异常
*/
public LifecycleWebServer(int port, int poolsize) throws IOException {
   exec = Executors.newFixedThreadPool(poolsize);
   ss = new ServerSocket(port);
}

/**
* 启动服务器的方法

* @throws IOException 接受连接的时候可能会产生该异常
*/
public void start() throws IOException {
   while (!exec.isShutdown()) {
    final Socket s = ss.accept();
    exec.execute(new Runnable() {
     public void run() {
      handleRequest(s);
     }
    });
   }
}
/**
* 处理请求,如果该方法为关闭请求,就关闭服务器,否则,调用dispacheRequest来处理请求
*
* @param s y要处理的Socket对象
*/
private void handleRequest(Socket s) {
   Request req = readRequest(s);
   if (isShtdownRequest(req))
    stop();
   else
    dispacheRequest(req);
}
/**
* 实际处理代码,未实现
*/
private void dispacheRequest(Request req) {

}
/**
* 判断连接是否为关闭请求,方法未实现
*/

private boolean isShtdownRequest(Request req) {

   return false;
}
/**
* 从socket中读取请求
*/
private Request readRequest(Socket s) {

   return null;
}
/**
* 关闭服务器
*/
private void stop() {
   exec.shutdown();
}
}

转载于:https://www.cnblogs.com/macula7/archive/2010/03/12/1960505.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值