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();
}
}
}
SOCKET监听随TOMCAT启动而启动
最新推荐文章于 2024-08-26 07:41:45 发布