文章目录
一、Netty的介绍
二、Netty的应用场景
1. 互联网行业
2. 游戏行业
3. 大数据领域
三、I/O模型
1. Java BIO
(1)Java BIO 基本介绍
(2)Java BIO 工作机制
(3)Java BIO 应用实例
@Slf4j
public class BIOServer {
public static void main(String[] args) throws Exception {
/**
* 线程池机制
* 1.创建一个线程池
* 2.如果有客户端连接,就创建一个线程,与之通讯(单独写一个方法)
*/
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
// 创建ServerSocket
ServerSocket serverSocket = new ServerSocket(6666);
log.info("服务器启动了");
while (true) {
// 监听,等待客户端连接
log.info("阻塞等待连接....");
final Socket socket = serverSocket.accept();
log.info("连接到一个客户端");
// 创建一个线程,与之通讯(单独写一个方法)
newCachedThreadPool.execute(() -> handler(socket));
}
}
// 编写一个handler方法,和客户端通讯
public static void handler(Socket socket) {
// 通过socket获取输入流
try (InputStream inputStream = socket.getInputStream();) {
byte[] bytes = new byte[1024];
// 循环的读取客户端发送的数据
while (true) {
log.info("阻塞read....");
int read = inputStream.read(bytes);
if (read != -1) {
log.info("收到客户端消息:{}", new String(bytes, 0, read));
} else {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
23:33:18.906 [main] INFO com.lwk.nettydemo.bio.BIOServer - 服务器启动了
23:33:18.919 [main] INFO com.lwk.nettydemo.bio.BIOServer - 阻塞等待连接....
23:33:26.258 [main] INFO com.lwk.nettydemo.bio.BIOServer - 连接到一个客户端
23:33:26.260 [main] INFO com.lwk.nettydemo.bio.BIOServer - 阻塞等待连接....
23:33:26.261 [pool-1-thread-1] INFO com.lwk.nettydemo.bio.BIOServer - 阻塞read....
23:33:37.645 [pool-1-thread-1] INFO com.lwk.nettydemo.bio.BIOServer - 收到客户端消息:hello1
23:33:37.645 [pool-1-thread-1] INFO com.lwk.nettydemo.bio.BIOServer - 阻塞read....
23:34:20.527 [main] INFO com.lwk.nettydemo.bio.BIOServer - 连接到一个客户端
23:34:20.527 [main] INFO com.lwk.nettydemo.bio.BIOServer - 阻塞等待连接....
23:34:20.527 [pool-1-thread-2] INFO com.lwk.nettydemo.bio.BIOServer - 阻塞read....
23:34:31.339 [pool-1-thread-2] INFO com.lwk.nettydemo.bio.BIOServer - 收到客户端消息:hello2
23:34:31.339 [pool-1-thread-2] INFO com.lwk.nettydemo.bio.BIOServer - 阻塞read....