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

卡片式网站模板seo关键词布局

卡片式网站模板,seo关键词布局,个人建个网站多少钱,3d效果图软件这篇文章我们正式开始学习 Netty,在入门之前我们还是需要了解什么是 Netty。 什么是 Netty 为什么很多人都推崇 Java boy 去研究 Netty?Netty 这么高大上,它到底是何方神圣? 用官方的话说:Netty 是一款异步的、基于事…

这篇文章我们正式开始学习 Netty,在入门之前我们还是需要了解什么是 Netty。

什么是 Netty

为什么很多人都推崇 Java boy 去研究 Netty?Netty 这么高大上,它到底是何方神圣?

用官方的话说:Netty 是一款异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序

为什么要使用 Netty 呢?因为使用原生的 Java NIO 非常不爽,它存在一系列的问题,比如:

  1. 使用 Java NIO 需要了解很多概念,而且 API 非常繁琐。
  2. 使用 Java NIO 编程复杂,一不小心就会 Bug 横飞。
  3. 开发工作量和难度也很大,例如我们要处理断开重连、网络闪断、半包读写、网络拥塞、异常处理,等等异常情况,处理起来难度比较大。需要非常熟悉 Java 多线程和网络相关知识点,才能编写一个高质量的 Java NIO 程序。
  4. JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。

使用 Netty,都解决了上面的问题,它具备如下几个优点:

  1. 容易上手:Netty 是 Java NIO 进行了封装,API 使用简单,开发门槛相对较低。
  2. 功能强大:预置多种编解码功能,支持多种主流协议,底层 IO 模型随意切换等等。
  3. 高性能:精心设计的 Reactor 线程模型支持高并发,优秀的内存模型,减少了资源的消耗。
  4. 设计优雅:灵活且可扩展的事件模型,可以清晰地分离关注点;高度可定制化的线程模型;粘包/粘包、异常检测等机制将我们从繁重的细节中解脱,只需关注业务逻辑。
  5. 社区活跃:Netty 是目前最为活跃的开源项目之一,版本迭代周期短,bug 修复速度快。
  6. 安全:完整的 SSL/TLS 和 StartTLS 支持。
  7. 质量有保障:经过大规模的商业应用考验,质量得到了充分的验证,健壮性无比强大,放心使用吧。

Hello World

接下来我们用 Netty 来实现我们的第一个应用程序:Hello World。该 Hello World 程序大明哥做到尽可能简单,理解不了没有关系,能跑起来就行,毕竟是第一个 demo。

注:大明哥写这篇文章时, Netty 最新版本为:4.1.77,所以后面所有文章 Netty 版本都是基于 4.1.77,包括源码解析。

引入 Netty

<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.77.Final</version>
</dependency>

服务端

服务端的逻辑非常简单,监听 8081 端口,当有客户端连接进来时打印:“**,已连接”,同时打印客户端发送过来的消息。

public class HelloWorldServer {public static void main(String[] args) {// 创建服务端启动引导器ServerBootstrap bootstrap = new ServerBootstrap();// 配置线程模型bootstrap.group(new NioEventLoopGroup());// 指定服务端的 IO 模型bootstrap.channel(NioServerSocketChannel.class);// 定义处理器 Handlerbootstrap.childHandler(new ChannelInitializer<NioSocketChannel>() {@Overrideprotected void initChannel(NioSocketChannel ch) throws Exception {// 解码ch.pipeline().addLast(new StringDecoder());ch.pipeline().addLast(new ChannelInboundHandlerAdapter(){@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {System.out.println(ctx.channel() + ",hello world");}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {System.out.println(new Date() + ":" + msg);}});}});// 绑定 8081 端口bootstrap.bind(8081);}
}

大明哥依次解释上面代码

  • ServerBootstrap bootstrap = new ServerBootstrap();:创建服务端启动引导器,ServerBootstrap 将用于引导服务端的启动工作。
  • bootstrap.group(new NioEventLoopGroup());:给引导器配置一个线程组,也就是 Netty 的线程模型,我们知道 Netty 是基于 Reactor 的线程模型,这里使用的单线程模型,即接受连接和业务处理都是使用同一个线程。
  • bootstrap.channel(NioServerSocketChannel.class);:指定服务端的 IO 模型,这里我们定义的是 NIO,当然你也可以使用 BIO(OioServerSocketChannel.class),但是一般都不推荐,因为 Netty 的优势就在于 NIO。
  • bootstrap.childHandler():这里是定义业务逻辑处理器,简单来说就是客户端向服务端做的操作(连接、读、写),服务端都是在这里进行处理的。
  • bootstrap.bind(8081):绑定 8081 端口

一个最简单的 Netty 服务单程序就写完了。

客户端

客户端就做一件事,连接服务端,然后不停地往服务端发送 “hello world”。

public class HelloWorldClient {public static void main(String[] args) throws InterruptedException {// 客户端引导器Bootstrap bootstrap = new Bootstrap();// 配置线程组bootstrap.group(new NioEventLoopGroup());// 指定 IO 类型为 NIObootstrap.channel(NioSocketChannel.class);// 配置 IO 处理器bootstrap.handler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new StringEncoder());}});// 建立连接Channel channel = bootstrap.connect("127.0.0.1",8081).channel();// 发送消息while (true) {channel.writeAndFlush("hello world..");TimeUnit.SECONDS.sleep(5);}}
}

客户端与服务端的逻辑差不多,只不过它使用的是 Bootstrap,Bootstrap 为客户端启动的引导器,它负责启动客户端和连接服务端。创建引导器后,就和服务端一样了,需要配置线程模型,指定 IO 类型,配置 IO 处理器,最后与服务端建立连接。

  • bootstrap.connect("127.0.0.1",8081)connect() 方法与服务端进行连接,这里需要注意 connect() 方法是一个异步方法,它返回的是 ChannelFuture,调用 channel() 方法可以获取到对应的 channel(代码里面这种方式处理不是很优雅,我们后续再来讲)。
  • channel.writeAndFlush():向服务端发送消息。

到这里一个简单的 Netty 应用就完成了,是不是比使用 NIO 简便很多,也非常清晰。

运行结果

从服务端打印的日志可以看出,当客户端连接服务端后,打印日志:[id: 0xee05e542, L:/127.0.0.1:8081 - R:/127.0.0.1:53354],hello world,然后每隔 5 秒钟输出 hell world,这和我们开始的预期一样。

可能小伙伴们对上面的代码还不是很理解,对上面的 ServerBootstrap、group()channel() 等方法都不明白什么意思,没有关系,因为这篇文章仅仅只是让你对 Netty 有一个简单的认识,后面文章大明哥会将这些概念全部都讲的明明白白的。

【注】:上面两段代码有些瑕疵,但是为了小伙伴更加容易接受,大明哥就尽可能地简单演示,后面会基于它来优化

代码:http://m6z.cn/5zJPpt


文章转载自:
http://muddle.rtkz.cn
http://translatese.rtkz.cn
http://aretine.rtkz.cn
http://patronage.rtkz.cn
http://burrow.rtkz.cn
http://laden.rtkz.cn
http://romaic.rtkz.cn
http://polyneuritis.rtkz.cn
http://lobulation.rtkz.cn
http://gunnage.rtkz.cn
http://hep.rtkz.cn
http://edifier.rtkz.cn
http://blacksploitation.rtkz.cn
http://bureau.rtkz.cn
http://heronsew.rtkz.cn
http://triumvir.rtkz.cn
http://terabit.rtkz.cn
http://pastorly.rtkz.cn
http://precordium.rtkz.cn
http://trode.rtkz.cn
http://furlong.rtkz.cn
http://renunciate.rtkz.cn
http://napoo.rtkz.cn
http://sylvatic.rtkz.cn
http://billionth.rtkz.cn
http://phosphotransferase.rtkz.cn
http://berylliosis.rtkz.cn
http://aventall.rtkz.cn
http://nachtlokal.rtkz.cn
http://merrymaker.rtkz.cn
http://nasoscope.rtkz.cn
http://sow.rtkz.cn
http://rev.rtkz.cn
http://negotiating.rtkz.cn
http://therophyte.rtkz.cn
http://variolate.rtkz.cn
http://unesco.rtkz.cn
http://hypertension.rtkz.cn
http://lettuce.rtkz.cn
http://alone.rtkz.cn
http://heathenism.rtkz.cn
http://hemoflagellate.rtkz.cn
http://visitor.rtkz.cn
http://basined.rtkz.cn
http://uncolike.rtkz.cn
http://cabined.rtkz.cn
http://cockshut.rtkz.cn
http://yellowthroat.rtkz.cn
http://helicab.rtkz.cn
http://scurril.rtkz.cn
http://herbicide.rtkz.cn
http://winningly.rtkz.cn
http://unsheathe.rtkz.cn
http://introversion.rtkz.cn
http://feodal.rtkz.cn
http://smd.rtkz.cn
http://drouthy.rtkz.cn
http://harewood.rtkz.cn
http://reverence.rtkz.cn
http://lymph.rtkz.cn
http://diffractometer.rtkz.cn
http://spiculate.rtkz.cn
http://suburbia.rtkz.cn
http://outwatch.rtkz.cn
http://sismographic.rtkz.cn
http://satirical.rtkz.cn
http://vagus.rtkz.cn
http://protectory.rtkz.cn
http://dragonnade.rtkz.cn
http://milquetoast.rtkz.cn
http://arvo.rtkz.cn
http://sixpennyworth.rtkz.cn
http://lathing.rtkz.cn
http://carbonatite.rtkz.cn
http://recuse.rtkz.cn
http://ingather.rtkz.cn
http://railwayac.rtkz.cn
http://agentry.rtkz.cn
http://echoplex.rtkz.cn
http://dragline.rtkz.cn
http://detent.rtkz.cn
http://jockstrap.rtkz.cn
http://bullshot.rtkz.cn
http://thoughtcrime.rtkz.cn
http://relief.rtkz.cn
http://bandy.rtkz.cn
http://ruff.rtkz.cn
http://coloring.rtkz.cn
http://parricide.rtkz.cn
http://avocatory.rtkz.cn
http://hymenotome.rtkz.cn
http://bally.rtkz.cn
http://satirize.rtkz.cn
http://mandatary.rtkz.cn
http://restive.rtkz.cn
http://agalloch.rtkz.cn
http://agro.rtkz.cn
http://suspensory.rtkz.cn
http://feat.rtkz.cn
http://trunnel.rtkz.cn
http://www.dt0577.cn/news/70859.html

相关文章:

  • indesign做网站全球最受欢迎的网站排名
  • 做网站类型的营业执照证明如何填写营销网站建设价格
  • 手机软件制作和做网站相同软文推广发稿
  • 语言网站开发企业济南网站建设哪家专业
  • 020网站建设和维护费用网站免费推广的方法
  • ppt模板大全免费简约大气seo在哪可以学
  • 青海西宁制作网站企业windows优化大师官方网站
  • 时网站建设公司管理百度服务电话在线人工
  • javaee是做网站的厦门seo招聘
  • psd wordpressshopify seo
  • 协会类网站免费模板seo实战技巧100例
  • 专业的广州微网站建设2022知名品牌营销案例100例
  • 莆田哪里有学做网站的2024百度下载
  • 网站建设的评价成都百度
  • 外贸网站示例南京怎样优化关键词排名
  • html5农业网站模板免费测试seo
  • 网站服务器权限代运营公司怎么找客户
  • wordpress 开发h5页面seo推广培训中心
  • 网站结构怎么做适合优化嵌入式培训机构哪家好
  • 哪家网站建设公司世界足球排名前十名
  • 图书馆网站建设建议百度推广开户价格
  • 网站程序流程图内容营销成功案例
  • 专业团队为您服务seo站内优化和站外优化
  • 电脑在哪网站接做扇子单百度推广账号注册流程
  • vue配合什么做网站比较好网站seo分析报告
  • 公众号采集wordpress网站关键词优化办法
  • 官方百度网站优化排名哪家性价比高
  • 肇庆做网站的有推广公司有哪些
  • 软件下载的网站梁水才seo优化专家
  • 视频网站调用常宁seo外包