• 使用ExcutorService管理的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();
    }
    }

  • 相关阅读:
    模拟操作(键盘、鼠标)三
    获取硬件信息
    MVC+ajax权限管理
    Socket通信简介
    网页页头meta详解(科普知识)
    .Net 无法打开Offie Open XML文件(上传和下载使用)
    临时散文,哈哈
    SQL server中的一些查询
    vue 钩子函数中获取不到DOM节点
    HTML技巧:怎样禁止图片拖动复制
  • 原文地址:https://www.cnblogs.com/macula7/p/1960505.html
Copyright © 2020-2023  润新知