SOCKET监听随TOMCAT启动而启动

SOCKET监听随TOMCAT启动而启动[转载]
支持pool的连接

web.xml
   <!-- Socket服务 start -->
    <context-param>
        <param-name>socketPort</param-name>
        <param-value>2009</param-value>
    </context-param>
    <listener>
        <description>Socket服务随web启动而启动</description>
        <listener-class>org.ljk.socket.listener.ServerSocketListener</listener-class>
    </listener>
    <!-- Socket服务 end -->


public class ServerSocketListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent event) {

        String part = event.getServletContext().getInitParameter("socketPort");
        String maxConcent="5";
        event.getServletContext().log("++++++++++++++++++++++++++++++++");
        event.getServletContext().log("++++ Socket服务随web启动而启动 ++++");
        event.getServletContext()
                .log("++++++++++++++++++++++++++++++++" + part);

        new ServerSocketStart(Integer.parseInt(part),Integer.parseInt(maxConcent)).start();
        event.getServletContext().log("++++ Socket服务已经启动完毕 ++++");
       
       
    }

    public void contextDestroyed(ServletContextEvent event) {

    }
}


public class ServerSocketStart extends Thread {
    private int port;
    private int maxConnections;
    public ServerSocketStart(int aListenPort, int maxConnections){
        this.port=aListenPort;
        this.maxConnections=maxConnections;
    }
    public void run() {
        ServerSocketFactory serverSocketFactory=ServerSocketFactory.getDefault();
        try {
            ServerSocket serverSocket=serverSocketFactory.createSocket(port);
            Socket request = null;
            System.out.println("++++++ ServerSocket已经启动 ++++++");
            this.setUpHandlers();
            while(true) {
               
                request = serverSocket.accept();
                System.out.println("++++++ 客户请求成功 ++++++");
                //接收客户机连接请求
                PooledConnectionHandler.processRequest(request);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }

   
    public void setUpHandlers() {
        for(int i=0; i<maxConnections; i++) {
            PooledConnectionHandler currentHandler = new PooledConnectionHandler();
            System.out.println("++++++ Thread-Handler"+i+"已启动 ++++++");
            new Thread(currentHandler, "Handler " + i).start();
        }
    }
}


public class PooledConnectHandler implements Runnable {

    protected Socket connection;
    @SuppressWarnings("unchecked")
    protected static List pool = new LinkedList();
    public PooledConnectHandler() {}
    public void handleConnection() {
        System.out.println("客户:"+connection.getInetAddress()+"在时 间:"+Calendar.getInstance().getTime().toString()+"访问过!");
        try {
            PrintWriter streamWriter = new PrintWriter(connection.getOutputStream());
            BufferedReader streamReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String fileToRead = streamReader.readLine();
            BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));
            String line = null;
            while((line=fileReader.readLine())!=null)
                streamWriter.println(line);
            fileReader.close();
            streamWriter.close();
            streamReader.close();
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        catch(IOException e) {
           e.printStackTrace();
        }
    }
    public static void processRequest(Socket requestToHandle) {
        synchronized(pool) {
            pool.add(pool.size(), requestToHandle);
            pool.notifyAll();
        }
    }
    public void run() {
        while(true) {
            synchronized(pool) {
                while(pool.isEmpty()) {
                    try {
                        pool.wait();
                    }
                    catch(InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                connection= (Socket)pool.remove(0);
            }
            handleConnection();
        }
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值