Netty入门之WebSocket初体验
什么是Netty
- 高性能 事件驱动、异步非阻塞
- 基于NIO的客户端、服务端编程框架
- 稳定性和伸缩性
Netty使用场景
- 高性能领域
- 多线程并发领域
- 异步通信领域
IO通信
BIO通信
同步阻塞IO
- 一个线程负责连接
- 一个请求一应答
- 缺乏弹性伸缩能力
BIO通信模型
典型的就是tomcat
伪异步IO通信
同步阻塞IO
- 线程池负责连接
- M请求N连接
- 线程池阻塞
伪异步IO通信模型
NIO模型
同步非阻塞IO
- M请求1连接
- 缓冲区Buffer
- 通道Channel
- 多路复用器Selector
AIO通信
异步非阻塞IO
- 连接注册读写事件和回调函数
- 读写方法异步
- 主动通知程序
Netty实现WebSocket
项目地址: https://github.com/ghostKang/netty-study
maven依赖
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.16.Final</version>
</dependency>
启动类
import handler.MyWebSocketChannelHandler;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
/**
* 程序的入口,负责启动应用
*
* Created by Yuk on 2019/1/2.
*/
public class Main {
public static void main(String[] args) {
EventLoopGroup boosGroup = new NioEventLoopGroup();
EventLoopGroup workGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(boosGroup,workGroup);
b.channel(NioServerSocketChannel.class);
b.childHandler(new MyWebSocketChannelHandler());// 调用自己封装的处理类
System.out.println("服务端开启等待客户端连接...");
Channel ch = b.bind(9998).sync().channel();
ch.closeFuture().sync();
}catch (Exception e){
e.printStackTrace();
}finally {
// 优雅地退出程序