精通并发与Netty入门一:Netty理论知识介绍

Netty是目前无论是国内还是国外各大互联网公司必备的一个网络应用框架。Netty本身既然是网络框架,处理的基本都是与网络相关的这样的一些作用。由于Netty本身在设计上的一些非常巧妙的方式,是对于NIO的一个很好的实现。Netty在各种应用场景下都会得到很广泛的应用。无论是传统的基于http的这种短连接方式还是基于底层Socket的这样的访问方式。另外还支持H5中规范中新增加的一个特别重要的标准,就是关于长连接的websocket这样一种新的规范。Netty对于其提供了非常好的支撑。那么Netty本身其实从我个人的经验和学习的匹配来看,他的学习的曲线呢应该是比较陡峭的,换句话说学习Netty要掌握的一些无论是理论还是具体的一些关于并发的理解,都是涉及其中的。那么这篇文章除了介绍Netty,也会介绍和Netty相关的一些重要的技能,包括底层和基础的理论知识。无论你之前是不是在项目当中使用过Netty,或者是说仅仅使用Netty写过一些非常简单的练习程序。又或者对于Netty压根就没有一个很清晰的认识,根本就不知道Netty是干什么的。不管你是处于什么样的一种技术水平之上,我相信通过这篇文章的学习,大家都会对Netty有一个非常好的理解和把握。除了在这种非常大的互联网公司使用Netty之外,如果你有机会面试互联网公司开发职位的话,其实Netty或多或少都是会被提及的一个很重要的面试的点。当然在面试的时候会问你关于Netty相关与并发相关的一些很基础和重要的,也可能是很理论的一些内容。

我们先来了解一些关于Netty的介绍性的内容,帮助大家对Netty有一个很直观的理解,不着急上来就写程序。写程序之前你得知道你要编写的程序到底是干什么的对吧?我们先看下面关于Netty简短的介绍

“Netty是一个异步的,驱动的网络应用框架”

其实这句话描述了有三点。第一点Netty是一个异步的;第二点它是一个事件驱动的;第三点它是一个网络框架。

一:异步

我们首先来介绍异步:其实Netty的很多API都是异步的,这一点和我们经常写的那种传统比如struts、mvc等框架的编程模式有不太一样的地方。如果我们按照传统的这种mvc框架编写代码的话,就拿SpringMvc来说吧,或者Springboot道理都差不多:我们首先去定义自己的controller,然后实现若干的方法。每个方法上会指定一个url映射的一个地址。当用于请求了与之映射的url地址之后,并且携带了对应的参数。那么,请求就会映射到对应的controller方法上面。映射完方法之后再完成一些参数的装配,校验等基本逻辑。紧接着内开始进行调用,可能是调用service相关代码。完成一些真正的业务处理。处理完之后呢我们把结果返回给客户端。不管Struts还是SpringMvc,基本的逻辑都差不多。只不过实现方式有一些差别。

这就是很传统的代码编写方式。然而Netty呢是有比较多差别的。它本身之前也说了是一个异步的,换句话说呢,就说当我们执行完一个回调或者处理逻辑之后,实际上这个事情到底完成了吗,其实是不一定的,它有一个相应的回调,一般是通过监听器呢来去实现后续的一些逻辑的判断。比如说:当把一个消息你想发给用户,那么这个消息发出去之后,其实流程立刻就返回了,并且往下去执行,但是这个消息真正是不是达到客户端,其实是不一定的。它说通过相应的监听器作为一个回调的方式来去跟不同的状态决定这个消息到底是否真的发出去了,还是说在处理过程当中出现了异常等等,都是通过监听器的方式来进行进一步的判断。相应的这个发送消息这样的处理逻辑,其实调用完之后立即就返回了。它并没有真正的把消息发送出去,发送成功与否是由回调或者说是监听器进行判断的。这就是所谓的异步。那么,异步相对于同步来说复杂性就会提升很多。其实大家都知道,无论是Netty还是Node本身都是基于异步的这种线程模型。既然是异步,它比同步一定是复杂很多。因此大家一定要理解异步底层到底是如何进行处理的。我们如果去编程更好的代码。编写更健壮的代码。

二、事件驱动

什么叫事件驱动呢?对于Netty来说,它本身实现了很多的协议。这个协议来说呢其实是由一个一个阶段来构成的。举个简单的例子,像我们使用的WebSocket这种长连接的方式,让客户端和服务器端的能在一个持续连接上进行双向的这种数据通信,实际上就是一种分工的网络通信。对于这种方式来说呢,其实WebSocket本身是基于http的。首先呢,对于客户端来说,要发送一个http的请求,请求完之后会升级到一个WebSocket的协议之上。一旦链接建立好之后,客户端与服务器端实际上可以进行一个双向的数据通信。那么,在整个过程当中实际上会发生很多很多的事情,这些事情本身就对应着一个一个的事件。而Netty是将这些事件根据协议的规范,将这些事件一个一个都抽取出来,形成一个一个的回调方法,使得开发者只需要去处理相关的回调方法就OK了。
比如说在这个连接建立好之后,我们去重写一些相应的方法,实现相应的代码。如果获取到客户端发送过来的数据,这个事件一旦发生之后,Netty就会将流程转向一个特定的读方法。对于开发中来说只需要去覆写对应的读方法就可以了。当这个数据过来之后,这个read方法就会得到调用。那么,当连接处于不活跃状态之后,它有对应的回调方法。当连接一旦关闭掉,不管是服务器关闭还是客户端关闭,会回调一个相应的关闭的方法。实际上就是将一个一个的事件给抽取出来,抽取出来之后将这些事件映射到对应回调方法上面。那么,当这个事件一旦发生一直,那么相应的回调方法就会得到立刻的调用,从而进行业务代码的执行。这就是所谓的事件驱动的概念。

三、网络框架

这个就不多说了。

Netty的相关入门理论知识就介绍到这里,有不懂的或者基础都没有的,获取相应教程的,都可以+秋秋 14 012345 14

总结

其实你在学习Netty的时候并不仅仅是对Netty本身有一个很好理解,有很多的项目都是或多或少使用了Netty或者是基于了Netty,比如说像大数据处理中的Spark框架,它本身也是基于Netty。所以Netty学习好了之后,会对于你未来的无论是从事何种技术的学习都带来一些帮助,而且这些帮助有一些你根本就感觉不到。当你遇到了对应的你想学的技术之后,你会发生底层都是基于Netty框架的,Netty我已经学过了,所以你会更有信心地去学习你想学的技术。这就是学好一个基础给你带来的好处!

原文地址:https://www.cnblogs.com/java14/p/11395455.html

时间: 2024-10-10 03:53:04

精通并发与Netty入门一:Netty理论知识介绍的相关文章

数据库入门理论知识介绍

数据库入门理论知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1>.数据库(极难扩展): 2>.存储: 所以说做互联网的运维工程师要是把以上两点问题解决就可以轻松的搞定整个架构 2.什么是数据库: 查百度上有长篇大论了一下数据库特点,我们可以简单的理解: 数据库就是一个存放数据的仓库,这个仓库按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数

ElasticSearch实战系列四: ElasticSearch理论知识介绍

前言 在前几篇关于ElasticSearch的文章中,简单的讲了下有关ElasticSearch的一些使用,这篇文章讲一下有关 ElasticSearch的一些理论知识以及自己的一些见解. 虽然本人是一个实战派,不太喜欢讲这些理论知识,因为这块可以查看官方文档,那里会写得非常详细,但是在使用了ElasticSearch之后,发现有的知识点需要掌握一定的理论知识才能理解,对于初学者来说有的不好理解,因此写下该篇文章,希望读者在看完之后能够有所帮助. ElasticSearch 理论知识介绍 Ela

【机器学习算法-python实现】svm支持向量机(1)—理论知识介绍

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 强烈推荐阅读(http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html) 支持向量机SVM(support vector machines). SVM是一种二值分类器,是近些年比較流行的一种分类算法. 本文,首先要介绍一些主要的知识概念,在下一章将对SVM进行简单地代码实现. 2.基本概念 (1)线性可分 首先介绍一下什么叫线性

Netty入门之WebSocket初体验

说一说IO通信 BIO通信: BIO即同步阻塞模式一请求一应答的通信模型,该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程个数和客户端并发访问数呈1:1的正比关系,由于线程是JAVA虚拟机非常宝贵的系统资源,当线程数膨胀之后,系统的性能将急剧下降,随着并发访问量的继续增大,系统会发生线程堆栈溢出.创建新线程失败等问题,并最终导致进程宕机或者僵死,不能对外提供服务. BIO的服务端通信模型: 采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端

Netty入门二:开发第一个Netty应用程序

    既然是入门,那我们就在这里写一个简单的Demo,客户端发送一个字符串到服务器端,服务器端接收字符串后再发送回客户端. 2.1.配置开发环境 1.安装JDK 2.去官网下载jar包 (或者通过pom构建) 2.2.认识下Netty的Client和Server 一个Netty应用模型,如下图所示,但需要明白一点的是,我们写的Server会自动处理多客户端请求,理论上讲,处理并发的能力决定于我们的系统配置及JDK的极限. Client连接到Server端 建立链接发送/接收数据 Server端

JAVA通信系列三:Netty入门总结

一.Netty学习资料 书籍<Netty In Action中文版> 对于Netty的十一个疑问http://news.cnblogs.com/n/205413/ 深入浅出Nettyhttp://wenku.baidu.com/view/7765bc2db4daa58da0114a4c.html Netty了解与小试 http://www.cnblogs.com/xd502djj/archive/2012/06/25/2561318.html Netty系列之Netty高性能之道[精彩]htt

Netty入门之客户端与服务端通信(二)

Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码吧. 二.客户端与服务端的通信 2.1 服务端启动程序 public class MyServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup bossGroup = ne

netty入门实例

TimeServer.java package netty.timeserver.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGro

(入门篇 NettyNIO开发指南)第三章-Netty入门应用

作为Netty的第一个应用程序,我们依然以第2章的时间服务器为例进行开发,通过Netty版本的时间服务报的开发,让初学者尽快学到如何搭建Netty开发环境和!运行Netty应用程序. 如果你已经熟悉Netty    的基础应用,可以跳过本章,继续后面知识的学习.本章主要内容包括:.Netty开发环境的搭建.服务端程序TimeServer开发.客户端程序TimeClient开发时间服务器的运行和调试 3.1    Netty开发环境的搭建 首先假设你已经在本机安装了JDKI.7贯配置了JDK的环境