netty学习记录(1)

netty学习记录(1)


1.传统的bio编程

package com.zhuguozhu.client;

/**
 * 传统bio的客户端
 * @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("客户端"+i+"请求了服务器....");
            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;

/**
 * 传统的bio服务器端
 * @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("服务器端启动了....");
              //BIO网络编程
            while (true) {
              //进行阻塞
              Socket socket = serverSocket.accept();
              //启动一个线程来处理客户端请求
              new Thread(new ServerHandler(socket)).start();
             }
            
             //为异步IO网络编程
             //启动一个线程池处理客户端请求
//            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;

/**
 * 服务器端多线程处理流程
 * @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("客户端发送的消息:" + info);
                printWriter.println("服务器端响应了客户端请求....");
            }
        } 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;

/**
 * 服务器端线程池处理流程
 * @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);
    }
}


传统bio时间服务器:

package nettyexp01;

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

/**
 * 传统bio客户端
 * @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) {
	    		//采用默认的端口值
	    	}
	    }
	    
	    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) {
	    	//不需要处理
	    } 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;
/**
 * 传统Bio服务器端
 * @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;

/**
 * 传统bio服务器端处理流程
 * @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;
			}
		    }       
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_37770023/article/details/79929438
今日推荐