关于Netty
Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。
2
- <dependencies>
- <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- <version>4.1.36.Final</version>
- </dependency>
- </dependencies>
3
启动器中需要new一个NettyServer,并显式调用启动netty。
- @SpringBootApplication
- public class SpringCloudStudyDemoApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringCloudStudyDemoApplication.class,args);
- try {
- new NettyServer(12345).start();
- System.out.println("https://blog.csdn.net/moshowgame");
- System.out.println("http://127.0.0.1:6688/netty-websocket/index");
- }catch(Exception e) {
- System.out.println("NettyServerError:"+e.getMessage());
- }
- }
- }
4
NettyServer
启动的NettyServer,这里进行配置
- /**
- * NettyServer Netty服务器配置
- */
- public class NettyServer {
-
- private final int port;
-
- public NettyServer(int port) {
- this.port = port;
- }
-
- public void start() throws Exception {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup group = new NioEventLoopGroup();
-
- try {
- ServerBootstrap sb = new ServerBootstrap();
- sb.option(ChannelOption.SO_BACKLOG, 1024);
- sb.group(group, bossGroup) // 绑定线程池
- .channel(NioServerSocketChannel.class) // 指定使用的channel
- .localAddress(this.port)// 绑定监听端口
- .childHandler(new ChannelInitializer<SocketChannel>() { // 绑定客户端连接时候触发操作
- @Override
- protected void initChannel(SocketChannel ch) throws Exception {
- System.out.println("收到新连接");
-
- //websocket协议本身是基于http协议的,所以这边也要使用http解编码器
- ch.pipeline().addLast(new HttpServerCodec());
-
- //以块的方式来写的处理器
- ch.pipeline().addLast(new ChunkedWriteHandler());
- ch.pipeline().addLast(new HttpObjectAggregator(8192));
- ch.pipeline().addLast(new WebSocketServerProtocolHandler("/ws", null, true, 65536 * 10));