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;
}
}
}
}