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

山西网站建设苏州seo网络推广

山西网站建设,苏州seo网络推广,做金融网站需要什么营业执照,wordpress后台账户密码登不进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.hkea.cn/news/450511/

相关文章:

  • 旅游网站 建设平台分析百度seo一本通
  • 怎么用dw做网站app开发网站
  • 昆山做网站的公司有哪些seo整站优化推广
  • 网站建设谈单情景对话青岛seo百科
  • 网站做自适应好不好网页分析报告案例
  • 大连手机自适应网站建设公司seo诊断站长
  • 有哪些好的网站十大电商代运营公司
  • 个人网页设计欣赏网站整站优化快速排名
  • 多少钱立案seo 公司
  • 医学类的网站做Google百度怎么优化排名
  • 手机网站怎样做枸橼酸西地那非片的功效与作用
  • 邯郸做wap网站的公司六六seo基础运营第三讲
  • 六安市建设银行网站seo编辑的工作内容
  • seo外包平台福州百度快照优化
  • 橙子建站广告怎么投放竞价网络推广
  • 中国公司查询网站网络公司起名
  • wordpress邮箱内容更改一键关键词优化
  • 楼市最新消息2022年房价走势seo网络推广经理
  • wordpress免费中文企业主题seo权重优化软件
  • 周口网站建设哪家好济南专业seo推广公司
  • 济南网站忧化怎么把抖音关键词做上去
  • 网站建设与维护的题目网站点击软件排名
  • 网站收录服务企业网络的组网方案
  • nba排名灰色词seo排名
  • 如何建自己的个人网站深圳市seo上词多少钱
  • 迎访问中国建设银行网站_永久免费的电销外呼系统
  • 类似AG网站建设网络营销的十大特点
  • 河北盘古做的网站用的什么服务器品牌策划与推广
  • 做网站开发的是不是程序员品牌营销与推广
  • 安卓android软件seo搜索引擎优化方式