package com.github.zangxiaoqiang.io.bio; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.github.zangxiaoqiang.io.Handler; import com.github.zangxiaoqiang.io.IOServer; public abstract class BioTcpServer implements IOServer { ExecutorService executor; ServerSocket serverSocket; public BioTcpServer(String hostname, int port) { int core = Runtime.getRuntime().availableProcessors(); executor = Executors.newFixedThreadPool(core * getPoolSize()); try { serverSocket = new ServerSocket(); SocketAddress aaa = new InetSocketAddress(hostname, port); serverSocket.bind(aaa); } catch (IOException e) { e.printStackTrace(); } } @Override public void stop() { // TODO } @Override public void start() { while (true) { Socket socket = null; try { socket = serverSocket.accept(); executor.execute(getHandler(socket)); } catch (Exception e) { // TODO: handle exception } } } public abstract Handler getHandler(Socket socket); public abstract int getPoolSize(); }