netty learning record (1)

netty learning record (1)


1. Traditional bio programming

package com.zhuguozhu.client;

/**
 * Traditional bio client
 * @author Guozhu Zhu
 * @date 2018/4/13
 * @version 1.0
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    private static int PORT = 8379;
    private static String IP = "127.0.0.1";
    public static void main(String[] args) {
    	for (int i = 0; i < 500000; i++) {
        BufferedReader bufferedReader = null;
        PrintWriter printWriter = null;
        Socket socket = null;
        try {
            socket = new Socket(IP, PORT);
            printWriter = new PrintWriter(socket.getOutputStream(), true);
            bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            printWriter.println("Client "+i+"requested server....");
            String response = bufferedReader.readLine();
            System.out.println("Client:" + response);
        } catch (Exception e) {
            e.printStackTrace ();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace ();
                }
            }
            if (printWriter != null) {
                try {
                    printWriter.close();
                } catch (Exception e) {
                    e.printStackTrace ();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace ();
                }
            } else {
                socket = null;
            }
        }
    	}
    }
    
}


package com.zhuguozhu.server;

/**
 * Traditional bio server side
 * @author Guozhu Zhu
 * @date 2018/4/13
 * @version 1.0
 */
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private static int PORT = 8379;
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(PORT);
            System.out.println("The server has started....");
              //BIO network programming
            while (true) {
              // block
              Socket socket = serverSocket.accept();
              //Start a thread to handle client requests
              new Thread(new ServerHandler(socket)).start();
             }
            
             //Program for asynchronous IO network
             //Start a thread pool to handle client requests
//            HandlerExecutorPool pool = new HandlerExecutorPool(50, 1000);
//            Socket socket;
//            while (true) {  
//                socket = serverSocket.accept();  
//                pool.execute(new ServerHandler(socket));  
//            }
        } catch (Exception e) {
            e.printStackTrace ();
        } finally {
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace ();
                }
            }
            serverSocket = null;
        }
    }
   
}


package com.zhuguozhu.server;

/**
 * Server-side multi-threading process
 * @author Guozhu Zhu
 * @date 2018/4/13
 * @version 1.0
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerHandler implements Runnable {

    private Socket socket;

    public ServerHandler(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        BufferedReader bufferedReader = null;
        PrintWriter printWriter = null;
        try {
            bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            printWriter = new PrintWriter(socket.getOutputStream(), true);

            while (true) {
                String info = bufferedReader.readLine();
                if (info == null)
                    break;
                System.out.println("Message sent by client: " + info);
                printWriter.println("The server responded to the client's request....");
            }
        } catch (Exception e) {
            e.printStackTrace ();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace ();
                }
            }
            if (printWriter != null) {
                try {
                    printWriter.close();
                } catch (Exception e) {
                    e.printStackTrace ();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace ();
                }
            }
            socket = null;
        }
    }
    
}



package com.zhuguozhu.server;

/**
 * Server-side thread pool processing flow
 * @author Guozhu Zhu
 * @date 2018/4/13
 * @version 1.0
 */
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class HandlerExecutorPool {
	
    private ExecutorService executor;

    public HandlerExecutorPool(int maxSize, int queueSize) {
        this.executor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), maxSize, 120L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(queueSize));
    }

    public void execute(Runnable task) {
        executor.execute(task);
    }
}


Traditional bio time server:

package nettyexp01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * Traditional bio client
 * @author Guozhu Zhu
 * @date 2018/3/14
 * @version 1.0
 *
 */
public class TimeClient {
	
	public static void main(String[] args) {
	    int port = 8089;
	    if (args != null && args.length > 0) {
	    	try {
	    		port = Integer.valueOf(args[0]);
	    	} catch (NumberFormatException e) {
	    		//use the default port value
	    	}
	    }
	    
	    Socket socket = null;
	    BufferedReader in = null;
	    PrintWriter out = null;
	    try {
	    	socket = new Socket("127.0.0.1", port);
	    	in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	        out = new PrintWriter(socket.getOutputStream(), true);
	    	out.println("QUERY TIME ORDER");
	    	System.out.println("send order to server success");
	    	String resp = in.readLine();
	    	System.out.println("Now is :" +resp);
	    } catch (Exception e) {
	    	// no processing required
	    } finally {
	    	if (out != null) {
	    		out.close();
	    		out = null;
	    	}
	    	
	    	if (in != null) {
	    		try {
	    			in.close();
	    		} catch (IOException e) {
	    			e.printStackTrace ();
	    		}
	    	}
	    	
	    	if (socket != null) {
	    		try {
	    			socket.close();
	    		} catch (IOException e) {
	    			e.printStackTrace ();
	    		}
	    		socket = null;
	    	}
	    }
	}

}
package nettyexp01;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * Traditional Bio server side
 * @author Guozhu zhu
 * @date 2018/3/14
 * @version 1.0
 *
 */
public class TimeServer {
	
	public static void main(String[] args) {
		int port = 8089;
		if (args != null && args.length != 0) {
			port = Integer.parseInt(args[0]);
		}
		ServerSocket server = null;
		try {
			server = new ServerSocket(port);
		    System.out.println("The time server is start in port : "+ port);
            Socket socket = null;
            while (true) {
            	socket = server.accept();
            	new Thread(new TimeServerHandler(socket)).start();
            }
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace ();
		} finally{
			if (server != null) {
				System.out.println("The time server close");
				try {
					server.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace ();
				}
				server = null;
			}
		}	
	}

}

package nettyexp01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Date;

/**
 * Traditional bio server-side processing flow
 * @author Guozhu Zhu
 * @date 2018/4/13
 * @version 1.0
 *
 */
public class TimeServerHandler implements Runnable {
    
	public Socket socket = null;
	public TimeServerHandler(Socket socket) {
		this.socket = socket;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
          BufferedReader in = null;
          PrintWriter out = null;
          try {
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		    out = new PrintWriter(this.socket.getOutputStream(), true);
		    String currentTime = null;
		    String body = null;
		    while (true) {
		    	body = in.readLine();
		    	if (body == null) {
		    		break;
		    	}
		    	System.out.println("The time server receive order :" + body);
		    	currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body)? new Date(System.currentTimeMillis()).toString():"BAD ORDER";
		    	out.println(currentTime);
		    }
		    } catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace ();
			if (in != null) {
				try {
					in.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			if (out != null) {
				out.close();
				out = null;
			}
			if (this.socket != null) {
				try {
					this.socket.close();
				} catch (IOException e2) {
					e2.printStackTrace();
				}
				this.socket = null;
			}
		    }       
	}

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324411476&siteId=291194637
Recommended