# netty
**Repository Path**: congjinlai/netty
## Basic Information
- **Project Name**: netty
- **Description**: netty-websocket
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-07-30
- **Last Updated**: 2020-12-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# netty
#### 介绍
springboot集成netty-websocket
#### 1.添加依赖
```
io.netty
netty-all
4.1.2.Final
```
#### 2.创建启动类
线程交予线程池处理
```java
@Slf4j
@Service
public class NettyWebSocketServer implements Runnable {
private EventLoopGroup bossGroup = new NioEventLoopGroup();
private EventLoopGroup workerGroup = new NioEventLoopGroup();
private ServerBootstrap serverBootstrap = new ServerBootstrap();
private static final int RECREATE_ALLOCATOR_SIZE = 592048;
private static final Integer PORT = 1235;
private ChannelFuture serverChannelFuture;
private final NettyWebsocketChildHandlerInitializer childChannelHandler;
NettyWebSocketServer(NettyWebsocketChildHandlerInitializer childChannelHandler) {
this.childChannelHandler = childChannelHandler;
}
@Override
public void run() {
build();
}
/**
* 启动NettyWebSocket
*/
private void build() {
Long beginTime = System.currentTimeMillis();
serverBootstrap.group(bossGroup, workerGroup)
// 指定是Nio通信服务
.channel(NioServerSocketChannel.class)
// TCP参数配置 握手字符串长度设置
.option(ChannelOption.SO_BACKLOG, 1024)
// 设置TCP NO_DELAY 算法 尽量发送大文件包
.option(ChannelOption.TCP_NODELAY, true)
// 开启心跳模式
.childOption(ChannelOption.SO_KEEPALIVE, true)
// 配置固定长度接收缓存内存分配
.childOption(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(RECREATE_ALLOCATOR_SIZE))
.childHandler(childChannelHandler);
try {
serverChannelFuture = serverBootstrap.bind(PORT).sync();
Long endTime = System.currentTimeMillis();
log.info("服务器启动完成,耗时:[{}]毫秒,已经在端口:[{}]进行阻塞等待", endTime - beginTime, PORT);
} catch (InterruptedException e) {
log.error(e.getMessage());
// 优雅关闭连接
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
e.printStackTrace();
}
}
@PreDestroy
public void close() {
try {
// 监听服务器关闭监听
if (serverChannelFuture != null) {
serverChannelFuture.channel().closeFuture().sync();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
public ChannelHandler getChildChannelHandler() {
return childChannelHandler;
}
}
```
#### 3.创建NettyWebSocketServerHandler核心处理类
```java
@Slf4j
@Component
@ChannelHandler.Sharable
public class NettyWebSocketServerHandler extends SimpleChannelInboundHandler