springboot가 netty 프레임워크를 통합하는 방법은 무엇입니까?

WBOY
풀어 주다: 2023-05-10 21:55:10
앞으로
701명이 탐색했습니다.

Netty는 고성능 IO 프레임워크로서 매우 사용하기 쉬운 기술 프레임워크입니다.

Netty는 NIO 기반의 클라이언트 및 서버 측 프로그래밍 프레임워크로, 빠르고 쉽게 개발할 수 있습니다. 특정 프로토콜을 채택하는 클라이언트 및 서버 애플리케이션 구현과 같은 네트워크 애플리케이션. Netty는 TCP 및 UDP 기반 소켓 서비스 개발과 같은 네트워크 애플리케이션의 프로그래밍 및 개발 프로세스를 단순화하고 합리화하는 것과 같습니다.
"빠름"과 "간단함"은 유지 관리나 성능 문제를 일으키지 않습니다. Netty는 여러 프로토콜(FTP, SMTP, HTTP 등과 같은 다양한 바이너리 텍스트 프로토콜 포함)의 구현 경험을 흡수하고 매우 신중하게 설계된 프로젝트입니다. 결국 Netty는 애플리케이션의 성능, 안정성, 확장성을 보장하면서 손쉬운 개발을 보장하는 방법을 성공적으로 찾았습니다
우선 전체 프로젝트에 pom

  4.0.0  org.springframework.boot spring-boot-starter-parent 2.2.1.RELEASE    com.cxy netty 0.0.1-SNAPSHOT netty Demo project for Spring Boot  1.8    org.springframework.boot spring-boot-starter-web   io.netty netty-all 4.1.25.Final   org.springframework.boot spring-boot-starter-test test   org.junit.vintage junit-vintage-engine        org.springframework.boot spring-boot-maven-plugin    
로그인 후 복사

handler 클래스를 도입하는 것은 변하지 않을 것입니다

package com.cxy.netty.controller; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.util.CharsetUtil; public class EchoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg){ ByteBuf in = (ByteBuf) msg; System.out.println("Server received: " + in.toString(CharsetUtil.UTF_8)); ctx.write(in); } public void channelReadComplete(ChannelHandlerContext ctx){ ctx.writeAndFlush(ChannelFutureListener.CLOSE); public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause){ cause.printStackTrace(); ctx.close(); }
로그인 후 복사

이것은 핸들러는 공식 웹사이트에서 복사되었습니다

방법 1: @PostConstruct에 주석 달기

package com.cxy.netty.controller; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.net.InetSocketAddress; @Component public class NettyServer { /*private int port =8080; public int getPort() { return port; } public void setPort(int port) { this.port = port; } public NettyServer(int port) { this.port = port; }*/ @PostConstruct public void start() throws Exception { System.out.println("启动记载netty"); EventLoopGroup boss = new NioEventLoopGroup(); EventLoopGroup work = new NioEventLoopGroup(); ServerBootstrap b = new ServerBootstrap(); b.group(boss,work) .channel(NioServerSocketChannel.class) .localAddress(new InetSocketAddress(8082)) .childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new EchoServerHandler()); } }); System.out.println("启动加载netty2"); ChannelFuture channelFuturef = b.bind().sync(); if (channelFuturef.isSuccess()){ System.out.println("启动成功"); } } }
로그인 후 복사

시작하려면 클릭하세요:

로그를 살펴보세요:

springboot가 netty 프레임워크를 통합하는 방법은 무엇입니까?

설명이 시작되었습니다

이 주석이 그토록 마술적인 이유는 다음과 같습니다.

springboot가 netty 프레임워크를 통합하는 방법은 무엇입니까?

일반적인 의미는 클래스가 로드될 때 이 메서드도 로드된다는 의미입니다. 초기 로드의 의미:

@Documented @Retention (RUNTIME) @Target(METHOD) public @interface PostConstruct { }
로그인 후 복사

방법 2: 리스너를 사용하여 시작:

package com.cxy.netty.controller; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * 系统初始化监听器 * @author Administrator * */ public class InitListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { NettyServer nettyServer = new NettyServer(8081); try { nettyServer.start(); } catch (Exception e) { e.printStackTrace(); } } @Override public void contextDestroyed(ServletContextEvent sce) { } }
로그인 후 복사

시작 클래스:

package com.cxy.netty; import com.cxy.netty.controller.InitListener; import com.cxy.netty.controller.NettyServer; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; @SpringBootApplication public class NettyApplication { /** * 注册监听器 * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean public ServletListenerRegistrationBean servletListenerRegistrationBean() { ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean(); servletListenerRegistrationBean.setListener(new InitListener()); return servletListenerRegistrationBean; } public static void main(String[] args) { SpringApplication.run(NettyApplication.class, args); } }
로그인 후 복사

로그 보기:

springboot가 netty 프레임워크를 통합하는 방법은 무엇입니까?

방법 3: ApplicationListener 컨텍스트 리스너 사용

package com.cxy.netty.controller; import com.cxy.netty.controller.NettyServer; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; @Component public class NettyBooter implements ApplicationListener { @Override public void onApplicationEvent(ContextRefreshedEvent event) { NettyServer nettyServer = new NettyServer(8081); try { nettyServer.start(); } catch (Exception e) { e.printStackTrace(); } } }
로그인 후 복사

시작 클래스:

package com.cxy.netty; import com.cxy.netty.controller.NettyServer; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; @SpringBootApplication public class NettyApplication { /** * 注册监听器 * @return */ /* @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean public ServletListenerRegistrationBean servletListenerRegistrationBean() { ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean(); servletListenerRegistrationBean.setListener(new InitListener()); return servletListenerRegistrationBean; }*/ public static void main(String[] args) { SpringApplication.run(NettyApplication.class, args); } }
로그인 후 복사

시작 로그 보기:

springboot가 netty 프레임워크를 통합하는 방법은 무엇입니까?

방법 4: commiandLinerunner 시작

package com.cxy.netty; import com.cxy.netty.controller.NettyServer; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; /* @SpringBootApplication public class NettyApplication { */ /** * 注册监听器 * @return *//* */ /* @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean public ServletListenerRegistrationBean servletListenerRegistrationBean() { ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean(); servletListenerRegistrationBean.setListener(new InitListener()); return servletListenerRegistrationBean; }*//* public static void main(String[] args) { SpringApplication.run(NettyApplication.class, args); } } */ @SpringBootApplication public class NettyApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(NettyApplication.class, args); } @Override public void run(String... args) throws Exception { NettyServer echoServer = new NettyServer(8083); echoServer.start(); } }
로그인 후 복사

로그를 보세요:

springboot가 netty 프레임워크를 통합하는 방법은 무엇입니까?

위 내용은 springboot가 netty 프레임워크를 통합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!