当前位置: 首页 > news >正文

网站建设玖首选金手指南昌seo

网站建设玖首选金手指,南昌seo,杭州集团网站建设方案,电商小程序模板Gateway和Netty都有盲区的感觉; 一、Netty简介 Netty是一个异步的,事件驱动的网络应用框架,用以快速开发高可靠、高性能的网络应用程序。 传输服务:提供网络传输能力的管理; 协议支持:支持常见的数据传输…

Gateway和Netty都有盲区的感觉;

一、Netty简介

Netty是一个异步的,事件驱动的网络应用框架,用以快速开发高可靠、高性能的网络应用程序。

传输服务:提供网络传输能力的管理;

协议支持:支持常见的数据传输协议;

核心模块:包括可扩展事件模型、通用的通信API、零拷贝字节缓冲;

二、Netty入门案例

1、服务端启动

配置Netty服务器端程序,引导相关核心组件的加载;

public class NettyServer {public static void main(String[] args) {// EventLoop组,处理事件和IOEventLoopGroup parentGroup = new NioEventLoopGroup();EventLoopGroup childGroup = new NioEventLoopGroup();try {// 服务端启动引导类ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(parentGroup, childGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInit());// 异步IO的结果ChannelFuture channelFuture = serverBootstrap.bind(8082).sync();channelFuture.channel().closeFuture().sync();} catch (Exception e){e.printStackTrace();} finally {parentGroup.shutdownGracefully();childGroup.shutdownGracefully();}}
}

2、通道初始化

ChannelInitializer特殊的通道处理器,提供一种简单的方法,对注册到EventLoop的通道进行初始化;比如此处设置的编码解码器,自定义处理器;

public class ChannelInit extends ChannelInitializer<SocketChannel> {@Overrideprotected void initChannel(SocketChannel socketChannel) {// 获取管道ChannelPipeline pipeline = socketChannel.pipeline();// Http编码、解码器pipeline.addLast("DefHttpServerCodec",new HttpServerCodec());// 添加自定义的handlerpipeline.addLast("DefHttpHandler", new DefHandler());}
}

3、自定义处理器

处理对服务器端发起的访问,通常包括请求解析,具体的逻辑执行,请求响应等过程;

public class DefHandler extends SimpleChannelInboundHandler<HttpObject> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, HttpObject message) throws Exception {if(message instanceof HttpRequest) {// 请求解析HttpRequest httpRequest = (HttpRequest) message;String uri = httpRequest.uri();String method = httpRequest.method().name();log.info("【HttpRequest-URI:"+uri+"】");log.info("【HttpRequest-method:"+method+"】");Iterator<Map.Entry<String,String>> iterator = httpRequest.headers().iteratorAsString();while (iterator.hasNext()){Map.Entry<String,String> entry = iterator.next();log.info("【Header-Key:"+entry.getKey()+";Header-Value:"+entry.getValue()+"】");}// 响应构建ByteBuf content = Unpooled.copiedBuffer("Netty服务", CharsetUtil.UTF_8);FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, content);response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain;charset=utf-8");response.headers().set(HttpHeaderNames.CONTENT_LENGTH, content.readableBytes());ctx.writeAndFlush(response);}}
}

4、测试请求

上面入门案例中,简单的配置了一个Netty服务器端,启动之后在浏览器中模拟访问即可;

http://127.0.0.1:8082/?id=1&name=Spring

三、Gateway集成

1、依赖层级

项目中Gateway网关依赖的版本为2.2.5.RELEASE,发现Netty依赖的版本为4.1.45.Final,是当下比较主流的版本;

<!-- 1、项目工程依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>2.2.5.RELEASE</version>
</dependency><!-- 2、starter-gateway依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>2.3.2.RELEASE</version>
</dependency><!-- 3、starter-webflux依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-reactor-netty</artifactId><version>2.3.2.RELEASE</version>
</dependency>

2、自动化配置

在Gateway网关的自动化配置配置类中,提供了Netty配置的管理;

@AutoConfigureBefore({ HttpHandlerAutoConfiguration.class,WebFluxAutoConfiguration.class })
@ConditionalOnClass(DispatcherHandler.class)
public class GatewayAutoConfiguration {@Configuration(proxyBeanMethods = false)@ConditionalOnClass(HttpClient.class)protected static class NettyConfiguration {@Bean@ConditionalOnProperty(name = "spring.cloud.gateway.httpserver.wiretap")public NettyWebServerFactoryCustomizer nettyServerWiretapCustomizer(Environment environment, ServerProperties serverProperties) {return new NettyWebServerFactoryCustomizer(environment, serverProperties) {@Overridepublic void customize(NettyReactiveWebServerFactory factory) {factory.addServerCustomizers(httpServer -> httpServer.wiretap(true));super.customize(factory);}};}}
}

四、配置加载

1、基础配置

在工程的配置文件中,简单做一些基础性的设置;

server:port: 8081                  # 端口号netty:                      # Netty组件connection-timeout: 3000  # 连接超时

2、属性配置类

在ServerProperties类中,并没有提供很多显式的Netty配置参数,更多信息需要参考工厂类;

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {private Integer port;public static class Netty {private Duration connectionTimeout;}
}

3、配置加载分析

  • 基于配置的属性,定制化管理Netty服务的信息;
public class NettyWebServerFactoryCustomizerimplements WebServerFactoryCustomizer<NettyReactiveWebServerFactory>{private final Environment environment;private final ServerProperties serverProperties;@Overridepublic void customize(NettyReactiveWebServerFactory factory) {PropertyMapper propertyMapper = PropertyMapper.get().alwaysApplyingWhenNonNull();ServerProperties.Netty nettyProperties = this.serverProperties.getNetty();propertyMapper.from(nettyProperties::getConnectionTimeout).whenNonNull().to((connectionTimeout) -> customizeConnectionTimeout(factory, connectionTimeout));}
}
  • NettyReactiveWeb服务工厂,基于上述入门案例,创建WebServer时,部分参数信息出自LoopResources接口;
public class NettyReactiveWebServerFactory extends AbstractReactiveWebServerFactory {private ReactorResourceFactory resourceFactory;@Overridepublic WebServer getWebServer(HttpHandler httpHandler) {HttpServer httpServer = createHttpServer();ReactorHttpHandlerAdapter handlerAdapter = new ReactorHttpHandlerAdapter(httpHandler);NettyWebServer webServer = new NettyWebServer(httpServer, handlerAdapter, this.lifecycleTimeout);webServer.setRouteProviders(this.routeProviders);return webServer;}private HttpServer createHttpServer() {HttpServer server = HttpServer.create();if (this.resourceFactory != null) {LoopResources resources = this.resourceFactory.getLoopResources();server = server.tcpConfiguration((tcpServer) -> tcpServer.runOn(resources).addressSupplier(this::getListenAddress));}return applyCustomizers(server);}}

五、周期管理方法

1、控制类

Gateway项目中,Netty服务核心控制类,通过NettyReactiveWebServerFactory工厂类创建,对Netty生命周期的管理提供了一层包装;

public class NettyWebServer implements WebServer {private final HttpServer httpServer;private final ReactorHttpHandlerAdapter handlerAdapter;/*** 启动方法*/@Overridepublic void start() throws WebServerException {if (this.disposableServer == null) {this.disposableServer = startHttpServer();// 控制台日志logger.info("Netty started on port(s): " + getPort());startDaemonAwaitThread(this.disposableServer);}}private DisposableServer startHttpServer() {HttpServer server = this.httpServer;if (this.routeProviders.isEmpty()) {server = server.handle(this.handlerAdapter);}return server.bindNow();}/*** 停止方法*/@Overridepublic void stop() throws WebServerException {if (this.disposableServer != null) {// 释放资源if (this.lifecycleTimeout != null) {this.disposableServer.disposeNow(this.lifecycleTimeout);}else {this.disposableServer.disposeNow();}// 对象销毁this.disposableServer = null;}}
}

2、管理类

Netty组件中抽象管理类,以安全的方式构建Http服务;

public abstract class HttpServer {public static HttpServer create() {return HttpServerBind.INSTANCE;}public final DisposableServer bindNow() {return bindNow(Duration.ofSeconds(45));}public final HttpServer handle(BiFunction<? super HttpServerRequest, ? superHttpServerResponse, ? extends Publisher<Void>> handler) {return new HttpServerHandle(this, handler);}
}

ENDENDEND

http://www.dt0577.cn/news/9688.html

相关文章:

  • 网站建设好后打开是目录文件培训总结
  • php网站开发 知乎如何自己做网页
  • 平台推广网站排名十大短视频平台排行榜
  • 专业网站建设价格大全短视频营销案例
  • 海口手机端建站模板最新国际新闻
  • 浦东建设网站制作搜索网
  • 河南哪里网站建设公司迅雷下载磁力天堂
  • 公司建网站哪家网络推广工作好吗
  • 网站建设技术教程网络项目平台
  • 上海做网站的小公司手机百度极速版
  • 如何做网站在网上销售最近的国际新闻热点
  • 免费搭建个人业务网站怎么做网站免费的
  • 小程序服务器多少钱做seo要投入什么
  • 佛山 顺德网站设计微信推广加人
  • php企业网站开发教程seo推广排名平台有哪些
  • wordpress 收费吗宁波seo推广联系方法
  • 成都网站seo费用天津百度网站快速排名
  • 在网站上做网络课堂软件多少钱竞价推广怎样管理
  • java做简易网站关键词优化案例
  • 文登区城乡建设局网站响应式网站模板的优势
  • 重庆网站建设及推广公司百度网址提交入口平台
  • 西安做网站哪里价格低广告策划公司
  • 免费申请网站空间及域名百度站长工具数据提交
  • 衡阳网站下载优化大师安装桌面
  • 做网站还 淘宝无锡营销型网站建设
  • 平台appseo网站排名的软件
  • 工业和信息化部网站备案查询怎么创建网站链接
  • 盐城建设银行网站获客软件
  • 肇东市网站app推广代理
  • 快站wordpress十大搜索引擎排名