package cc.mrbird.febs.common.websocket;
|
|
import io.netty.bootstrap.ServerBootstrap;
|
import io.netty.channel.ChannelOption;
|
import io.netty.channel.EventLoopGroup;
|
import io.netty.channel.nio.NioEventLoopGroup;
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
import io.netty.handler.codec.http.HttpObjectAggregator;
|
import io.netty.handler.codec.http.HttpServerCodec;
|
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
|
import io.netty.handler.logging.LogLevel;
|
import io.netty.handler.logging.LoggingHandler;
|
import io.netty.handler.stream.ChunkedWriteHandler;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
|
@Configuration
|
public class NettyWebSocketConfig {
|
|
@Value("${netty.websocket.port:9102}")
|
private int port;
|
|
@Bean(name = "bossGroup", destroyMethod = "shutdownGracefully")
|
public EventLoopGroup bossGroup() {
|
return new NioEventLoopGroup(1);
|
}
|
|
@Bean(name = "workerGroup", destroyMethod = "shutdownGracefully")
|
public EventLoopGroup workerGroup() {
|
return new NioEventLoopGroup();
|
}
|
|
@Bean
|
public ServerBootstrap serverBootstrap(EventLoopGroup bossGroup, EventLoopGroup workerGroup) {
|
ServerBootstrap bootstrap = new ServerBootstrap();
|
bootstrap.group(bossGroup, workerGroup)
|
.channel(NioServerSocketChannel.class)
|
.option(ChannelOption.SO_BACKLOG, 128)
|
.childOption(ChannelOption.SO_KEEPALIVE, true)
|
.handler(new LoggingHandler(LogLevel.INFO))
|
.childHandler(new io.netty.channel.ChannelInitializer<io.netty.channel.socket.SocketChannel>() {
|
@Override
|
protected void initChannel(io.netty.channel.socket.SocketChannel ch) throws Exception {
|
ch.pipeline().addLast(new HttpServerCodec());
|
ch.pipeline().addLast(new ChunkedWriteHandler());
|
ch.pipeline().addLast(new HttpObjectAggregator(65536));
|
ch.pipeline().addLast(new WebSocketServerProtocolHandler("/ws"));
|
ch.pipeline().addLast(new cc.mrbird.febs.common.websocket.WebSocketServerHandler());
|
}
|
});
|
return bootstrap;
|
}
|
}
|