登录|注册|帮助中心|联系我们

导航
首页 综合百科 生活常识 数码科技 明星名人 传统文化 互联网 健康 影视 美食 教育 旅游 汽车 职场 时尚 运动 游戏 家电 地理 房产 金融 节日 服饰 乐器 歌曲 动物 植物
当前位置:首页 > 互联网

bootstrap登录模板实例(html登录注册界面模板)

发布时间:2023年1月8日责任编辑:林大生标签:注册
1. 前言

本节主要讲解服务端主启动类 ServerBootstrap 的核心 API 的使用。

2. ServerBootstrap 流程

ServerBootstrap 的用法基本上都是固定的,一般对于新接触 Netty 的同学来说,会觉得这些模板代码比较多,难以理解。我们主要记住几个核心配置即可。

    ?指定线程模型: 通过.group(bossGroup, workerGroup) 给引导类配置两大线程组,这个引导类的线程模型也就定型了。其中 bossGroup 表示监听端口,accept 新连接的线程组;workerGroup 表示处理每一条连接的数据读写的线程组; ?指定 IO 模型: 通过.channel(NioServerSocketChannel.class) 来指定 NIO 模型。如果指定 IO 模型为 BIO,那么这里配置上 OioServerSocketChannel.class 类型即可,通常都是使用 NIO,因为 Netty 的优势就在于 NIO; ?指定处理逻辑: 通过 childHandler () 方法,给这个引导类创建一个 ChannelInitializer,这里主要就是定义后续每条连接的数据读写,业务处理逻辑; ?绑定端口号: 调用 bind (80),端口号自定义,不要和其他应用的端口号有冲突即可。
3. 核心方法 ??????????方法 ???说明 ?????????group() ???用来指定线程模型 ?????????channel() ???用来指定 IO 模型 ?????????handler() ???用来指定服务端通道需要处理的业务逻辑(了解) ?????????childHandler() ???用来指定客户端通道需要处理的业务逻辑(掌握) ?????????attr() ???给服务端通道绑定自定义属性(了解) ?????????childAttr() ???给客户端通道绑定自定义属性(掌握) ?????????option() ???给服务端通道设置配置(了解) ?????????childOption() ???给客户端通道设置配置(了解) ?????????bind() ???用来绑定端口号 ???????
?

说明:客户端和服务端连接之后,会维持一个 Channel 通道,可以给其指定逻辑处理器和属性配置;当然,服务端启动的时候它也是一个特殊的 Channel 通道。

在开发当中,需要我们去自定义的方法主要是 childHandler () 和 childAttr () 这两个。childHandler () 用来绑定业务逻辑器,childAttr () 用来设置 Channel 属性。比如:绑定用户身份信息。其它方法的使用相对固定,了解即可。

???4. 核心方法详解 4.1 bind()

bind () 主要用来绑定本地端口号。

实例:

ChannelFuture future=serverBootstrap.bind(80);future.addListener(new GenericFutureListener<Future<? super Void>>() { ???public void operationComplete(Future<? super Void> future) { ???????if (future.isSuccess()) { ???????????System.out.println("端口绑定成功!"); ???????} else { ???????????System.err.println("端口绑定失败!"); ???????} ???}});

代码升级,如果绑定的端口已经存在,则端口号递增。当然,实际情况很少会去递增端口号,一般都是上线之前确定端口号,否则客户端不知道端口号,无法连接。

实例:

private static void bind(ServerBootstrap serverBootstrap, final int port) { ???ChannelFuture future=serverBootstrap.bind(port); ???future.addListener(new GenericFutureListener<Future<? super Void>>() { ???????public void operationComplete(Future<? super Void> future) { ???????????if (future.isSuccess()) { ???????????????System.out.println("端口[" + port + "]绑定成功!"); ???????????} else { ???????????????System.err.println("端口[" + port + "]绑定失败!"); ???????????????//递归重新绑定端口号 ???????????????bind(serverBootstrap, port + 1); ???????????} ???????} ???});} 4.2 attr()

attr () 方法可以给服务端的 channel,也就是 NioServerSocketChannel 指定一些自定义属性,可以通过 channel.attr() 取出这个属性。

实例:

//省略了其它模板代码serverBootstrap.attr(AttributeKey.newInstance("serverName"), "nettyServer")

总结,一般来说 attr () 运用得比较少,了解即可。

4.3 childAttr()

childAttr 可以给每一条连接指定自定义属性,可以通过 channel.attr() 取出该属性。

实例:

//省略了其它模板代码serverBootstrap.childAttr(AttributeKey.newInstance("clientKey"), "clientValue")

总结,常见的运用场景,客户端登录成功之后,给其对应的 Channel 绑定标识,下次只需要判断该 Channel 是否有标识即可知道其是否已经登录。

4.4 handler()

handler () 用于指定在服务端启动过程中的一些逻辑。

实例:

//省略了其它模板代码serverBootstrap.handler(new ChannelInitializer<NioServerSocketChannel>() { ???protected void initChannel(NioServerSocketChannel ch) { ???????System.out.println("服务端启动中"); ???}});

总结,可以在服务端启动的过程中做一些初始化方面的工作,比如,读取数据库的配置数据放到缓存当中,这个作为了解即可。

4.5 childHandler()

childHandler () 用于指定处理新连接数据的读写处理逻辑。

实例:

//省略了其它模板代码serverBootstrap.childHandler(new ChannelInitializer<NioSocketChannel>() { ???protected void initChannel(NioSocketChannel ch) { ???????//责任链,指定自定义处理业务的 Handler ???????ch.pipeline().addLast(new NettyServerHandler()); ???}});

总结,这个是核心,主要管理业务逻辑处理双向链表,后面会具体讲解

4.6 option()

option () 给服务端 channel 设置一些属性,最常见的就是 so_backlog。

实例:

//省略了其它模板代码serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024)

表示系统用于临时存放已完成三次握手的请求的队列的最大长度,如果连接建立频繁,服务器处理创建新连接较慢,可以适当调大这个参数。其实,客户端请求在服务端也是排队执行的,服务端的两大线程组分别监听客户端连接和处理客户端连接,一旦并发量很高的时候,服务端处理不过来,则会把等待处理的请求放入到临时队列里面,这个跟 Java 线程池的思想是一样的。

4.7 childOption()

childOption () 给每条连接设置一些 TCP 底层相关的属性。

实例:

//省略了其它模板代码serverBootstrap ???????.childOption(ChannelOption.SO_KEEPALIVE, true) ???????.childOption(ChannelOption.TCP_NODELAY, true)

代码说明:

    ?ChannelOption.SO_KEEPALIVE 表示是否开启 TCP 底层心跳机制,true 未开启; ?ChannelOption.TCP_NODELAY 表示是否开启 Nagle 算法,true 表示关闭,false 表示开启,通俗地说,如果要求高实时性,有数据发送时就马上发送,就关闭,如果需要减少发送次数减少网络交互,就开启。
5. 小结

本节学习的核心知识点掌握,具体如下:

    ?四个核心流程,分别是①设置线程组;②设置 IO 模型;③指定连接读写处理逻辑;④绑定端口号; ?核心方法的使用场景,重点掌握①bind ();②childAttr ();③childHandler ();④childOption () 的使用。

其它知识推荐

溜溜百科知识网——分享日常生活学习工作各类知识。 垃圾信息处理邮箱 tousu589@163.com
icp备案号 闽ICP备14012035号-2 互联网安全管理备案 不良信息举报平台 Copyright 2023 www.6za.net All Rights Reserved