手机随时阅读
新人专享大礼包¥24
简介我们在进行网页访问的时候会跟各种各样的证书打交道,比如在访问https网页的时候,需要检测https网站的证书有效性。OCSP就是一种校验协议,用于获取X.509数字证书的撤销状态。它是为了替换CRL而出现的。本文将会详细介绍OCSP的实现和优点。PKI中的CRL我们知道在PKI架构中,CA证书是非常重要的组件,客户端通过CA证书来验证服务的可靠性。对于CA证书本身来说在创建的时候是可以指定过
简介在前面的章节中,我们介绍了在netty中可以使用kequeue或者epoll来实现更为高效的native传输方式。那么kequeue和epoll和NIO传输协议有什么不同呢?本章将会以kequeue为例进行深入探讨。在上面我们介绍的native的例子中,关于kqueue的类有这样几个,分别是KQueueEventLoopGroup,KQueueServerSocketChannel和KQueu
简介对于IO来说,除了传统的blockIO,使用最多的就是NIO了,通常我们在netty程序中最常用到的就是NIO,比如NioEventLoopGroup,NioServerSocketChannel等。我们也知道在IO中有比NIO更快的IO方式,比如kqueue和epoll,但是这两种方式需要native方法的支持,也就是说需要在操作系统层面提供服务。如果我们在支持Kqueue或者epoll的服
简介之前我们介绍了一个非常优秀的细粒度控制JAVA线程的库:javathreadaffinity。使用这个库你可以将线程绑定到特定的CPU或者CPU核上,通过减少线程在CPU之间的切换,从而提升线程执行的效率。虽然netty已经够优秀了,但是谁不想更加优秀一点呢?于是一个想法产生了,那就是能不能把affinity库用在netty中呢?答案是肯定的,一起来看看吧。引入affinityaffinity
简介在PKI(publickeyinfrastructure)公钥设施基础体系中,所有的一切操作都是围绕着证书和密钥的,它提供了创建、管理、分发、使用、存储和撤销数字证书以及管理公钥加密所需的一组角色、策略、硬件、软件和程序。有了密钥,就可以根据密钥制作证书了。要想证书可以被广泛的使用,一个通用的标准肯定是少不了的,在PKI体系中,这个证书的标准就叫做X.509。X.509标准定义了公钥证书最常用
简介定时器是一种在实际的应用中非常常见和有效的一种工具,其原理就是把要执行的任务按照执行时间的顺序进行排序,然后在特定的时间进行执行。JAVA提供了java.util.Timer和java.util.concurrent.ScheduledThreadPoolExecutor等多种Timer工具,但是这些工具在执行效率上面还是有些缺陷,于是netty提供了HashedWheelTimer,一个优化
简介SpringBoot提供了HATEOAS的便捷使用方式,前面一篇文章我们也讲了如何在SpringBoot中使用HATEOAS。本文将会对这些内容进行扩展深入,详细讲解SpringBoot提供的这些基本方法。链接LinksHATEOAS的一个非常重要的特征就是在resources资源中包含超媒体,而超媒体最简单的表示就是链接。SpringHATEOAS为我们简化了封装Links的功能。我们看一个
简介HATEOAS是实现REST规范的一种原则,通过遵循HATEOAS规范,可以解决我们实际代码实现的各种个问题。作为java最流行的框架Spring当然也会不缺席HATEOAS的集成。本文将会通过一个具体的例子来讲解如何在SpringBoot中使用HATEOAS。我们的目标HATEOAS规则中,返回的数据会带有链接。我们以熟悉的Book为例,来展示这次的HATEOAS,首先创建一个Bookent
简介前面讲到了memcached的文本协议,虽然文本协议看起来非常简单,但是对于客户端来说一般还是会选择效率更高的二进制协议。二进制协议的本质和文本协议是一样的,只是他们的表现方式不同而已。本文将会详细介绍memcached中二进制协议的实现细节。memcached的协议包对于memcached的请求包和响应包来说,除了请求头有所区别之外,其他的格式都是一样的。所以对memcached的请求和响应
简介我们已经介绍了haproxy提出的proxyprotocol协议,通过proxyprotocol协议,服务器端可以获得客户端的真实IP地址和端口,从而可以进行一些非常有意义的操作。为什么获得客户端的真实IP地址会非常有意义呢?考虑一个藏在proxy背后的数据库,如果有多个客户端通过proxy进行数据库的连接,事实上因为都是通过代理进行连接,所以数据库中的所有的操作都是proxy服务器的IP地址
简介很多人都用过java中的枚举,枚举是JAVA1.5中引用的一个新的类型,用来表示可以列举的范围,但是可能很少有人知道java中的enum到底是怎么工作的,enum和Enum有什么关系?Enum可不可以扩展?一起来看看吧。enum和EnumJAVA1.5中引入了枚举类,我们通常使用enum关键字来定义一个枚举类:publicenumStatusEnum{START(1,"start"),INPR
简介JDK中的ThreadLocal可以通过get方法来获得跟当前线程绑定的值。而这些值是存储在ThreadLocal.ThreadLocalMap中的。而在ThreadLocalMap中底层的数据存储是一个Entry数组中的。那么从ThreadLocalMap中获取数据的速度如何呢?速度有没有可以优化的空间呢?一起来看看。从ThreadLocalMap中获取数据ThreadLocalMap作为一
简介用过缓存系统的肯定都听过memcached的大名,memcached是一个非常优秀的分布式内存缓存系统,应用非常的广泛。Memcached不仅仅是Web缓存,它更是一个通用的数据缓存,基本上你可以将任何东西存入memcached中,它的分布式设计具有很好的可扩展性和灵活性。Memcached是一个客户端服务器端的架构模式。一般来说,在服务器上搭建好Memcached的服务器端,接下来就可以使用
简介代理大家应该都很熟悉了,比较出名的像是nginx,apacheHTTPD,stunnel等。我们知道代理就是代替客户端向服务器端进行消息请求,并且希望在代理的过程中保留初始的TCP连接信息,例如源和目标IP和端口等,以提供一些个性化的操作。一般情况下,为了实现这个目标,有一些现成的解决办法,比如在HTTP协议中,可以使用“XForwardedFor”标头,来包含有关原始源地址,还有"XOrig
简介JDK中的Thread大家肯定用过,只要是用过异步编程的同学肯定都熟悉。为了保存Thread中特有的变量,JDK引入了ThreadLocal类来专门对Thread的本地变量进行管理。ThreadLocal很多新人可能不明白ThreadLocal到底是什么,它和Thread到底有什么关系。其实很简单,ThreadLocal本质上是一个key,它的value就是Thread中一个map中存储的值。
简介netty中提供的protobuf编码解码器可以让我们直接在netty中传递protobuf对象。同时netty也提供了支持UDP协议的channel叫做NioDatagramChannel。如果直接使用NioDatagramChannel,那么我们可以直接从channel中读写UDP对象:DatagramPacket。但是DatagramPacket中封装的是ByteBuf对象,如果我们想要
简介在之前的文章中我们讲过了,jbossmarshalling是一种非常优秀的java对象序列化的方式,它可以兼容JDK自带的序列化,同时也提供了性能和使用上的优化。那么这么优秀的序列化工具可不可以用在netty中作为消息传递的方式呢?答案当然是肯定的,在netty中一切皆有可能。netty中的marshallingprovider回顾一下jbossmarshalling的常用用法,我们需要从Ma
简介在JAVA程序中经常会用到序列化的场景,除了JDK自身提供的Serializable之外,还有一些第三方的产品可以实现对JAVA对象的序列化。其中比较有名的就是Googleprotobuf。当然,也有其他的比较出名的序列化工具,比如Kryo和JBossMarshalling。今天想给大家介绍的就是JBossMarshalling,为什么要介绍JBossMarshalling呢?用过google
简介我们在程序中除了使用常用的字符串进行数据传递之外,使用最多的还是JAVA对象。在JDK中,对象如果需要在网络中传输,必须实现Serializable接口,表示这个对象是可以被序列化的。这样就可以调用JDK自身的对象对象方法,进行对象的读写。那么在netty中进行对象的传递可不可以直接使用JDK的对象序列化方法呢?如果不能的话,又应该怎么处理呢?今天带大家来看看netty中提供的对象编码器。什么
简介要讲网络协议,肯定离不开OSI(OpenSystemInterconnection)的七层模型。我们一般关注的是网络层之上的几层,比如IPV4IPV6所在的网络层,TCPUDP所在的传输层,HTTPFTP所在的应用层等。今天要讲的sctp协议,全称是StreamControlTransmissionProtocol,翻译成中文就是流控制传输协议。是由IETF在RFC4960中提出的。传输层已经
简介在json之前,xml是最常用的数据传输格式,虽然xml的冗余数据有点多,但是xml的结构简单清晰,至今仍然运用在程序中的不同地方,对于netty来说自然也提供了对于xml数据的支持。netty对xml的支持表现在两个方面,第一个方面是将编码过后的多个xml数据进行frame拆分,每个frame包含一个完整的xml。另一方面是将分割好的frame进行xml的语义解析。进行frame拆分可以使用
简介字符串是我们程序中最常用到的消息格式,也是最简单的消息格式,但是正因为字符串string太过简单,不能附加更多的信息,所以在netty中选择的是使用byteBuf作为最底层的消息传递载体。虽然底层使用的ByteBuf,但是对于程序员来说,还是希望能够使用这种最简单的字符串格式,那么有什么简单的方法吗?netty中的字符串编码解码器为了解决在netty的channel中传递字符串的问题,nett
简介在现代计算机系统中,可以有多个CPU,每个CPU又可以有多核。为了充分利用现代CPU的功能,JAVA中引入了多线程,不同的线程可以同时在不同CPU或者不同CPU核中运行。但是对于JAVA程序猿来说创建多少线程是可以自己控制的,但是线程到底运行在哪个CPU上,则是一个黑盒子,一般来说很难得知。但是如果是不同CPU核对同一线程进行调度,则可能会出现CPU切换造成的性能损失。一般情况下这种损失是比较
简介什么是callback呢?简单点说callback就是回调通知,当我们需要在某个方法完成之后,或者某个事件触发之后,来通知进行某些特定的任务就需要用到callback了。最有可能看到callback的语言就是javascript了,基本上在javascript中,callback无处不在。为了解决callback导致的回调地狱的问题,ES6中特意引入了promise来解决这个问题。为了方便和n
简介前面我们讲到了JNA中JAVA代码和native代码的映射,虽然可以通过TypeMapper来将JAVA中的类型和native中的类型进行映射,但是native中的数据类型都是基础类型,如果native中的数据类型是复杂的struct类型该如何进行映射呢?不用怕,JNA提供了Structure类,来帮助我们进行这些映射处理。native中的struct什么时候会用到struct呢?一般情况下,
简介在JNA中,为了和native的function进行映射,我们可以有两种mapping方式,第一种是interfacemapping,第二种是directmapping。虽然两种方式不同,但是在具体的方法映射中,我们都需要在JAVA中定义一个和native方法进行映射的方法。而这个JAVA中的映射在JNA中就是一个function。通过或者function对象,我们可以实现一些非常强大的功能,
简介我们知道在native的代码中有很多指针,这些指针在JNA中被映射成为Pointer。除了Pointer之外,JNA还提供了更加强大的Memory类,本文将会一起探讨JNA中的Pointer和Memory的使用。PointerPointer是JNA中引入的类,用来表示native方法中的指针。大家回想一下native方法中的指针到底是什么呢?native方法中的指针实际上就是一个地址,这个地址
简介现在是互联网的世界,大家从各种网站中获取各类资源和信息,通常我们只需要牢记一个网站地址即可,至于这个网站后台的服务器在什么地方,我们并不需要关心。当我们的请求指向这个网址之后,接下来就只需要等待请求被转发到该网址的后端服务器上,得到返回的处理结果即可。这个将网站名称解析成为服务IP地址的服务就是DNS服务,它的全称是DomainNameSystem,也就是域名解析服务。那么DNS到底是怎么工作
简介netty中的数据是通过ByteBuf来进行传输的,一个ByteBuf中可能包含多个有意义的数据,这些数据可以被称作frame,也就是说一个ByteBuf中可以包含多个Frame。对于消息的接收方来说,接收到了ByteBuf,还需要从ByteBuf中解析出有用而数据,那就需要将ByteBuf中的frame进行拆分和解析。一般来说不同的frame之间会有有些特定的分隔符,我们可以通过这些分隔符来
简介netty提供了一个从ByteBuf到用户自定义的message的解码器叫做ByteToMessageDecoder,要使用这个decoder,我们需要继承这个decoder,并实现decode方法,从而在这个方法中实现ByteBuf中的内容到用户自定义message对象的转换。那么在使用ByteToMessageDecoder的过程中会遇到什么问题呢?为什么又会有一个ReplayingDec
Copyright © 2005-2022 51CTO.COM 版权所有 京ICP证060544号