《Netty实战》读书笔记一

Netty—–异步和事件驱动

  • Netty是什么

Netty是一个Java语言编写的用于创建高性能网络通讯程序的框架

  • 为什么不直接使用java语言编写网络程序

我们可以先看下面一段比较经典的网络通讯的流程代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

int port = 8080;
//监听端口
ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String request, response;
//readLine方法可能会阻塞
while ((request = in.readLine()) != null){
if("Done".equals(request)){
break;
}
//处理请求
response = process(request);
//返回响应
out.print(response);
}

以上代码只能处理一个客户端连接的情况,如果要多个客户端同时通讯,需要为每个请求单独分配一个线程去处理请求

这种方案存在的问题:

  • 处理请求的线程可能会在IO过程中可能会阻塞,大量线程阻塞的话会造成资源浪费
  • 创建线程需要分配内存
  • 线程切换会占用性能开销,线程数越多,性能开销越大