上篇文章(Netty入门—第一个完整的demo之智能客服)大明哥演示了强大的智能客服,它能够很好的解决用户的一些常见的问题,但是有些问题依然还需要人工客服来完成,所以这篇文章我们来实现人工坐席。功能实现当用户输入0的时候,智能客户需要将这个用户转发给某一个人工客服,如果没有人工客户在线需要提示用户是否继续等待。在等待期间若有人工客服上线则将其转接到该用户。那么服务端需要做如下几件事情:维护用户与人工坐席之间的关系,发的消息不能串。将人工坐席分配给用户。若没有人工坐席,则在用户等待期间,人工坐席上线则将其转接给该用户。消息的转发。至于用户和人工坐席,则相对来说就比较简单了,接收服务端的消息,并发
在前面8篇文章中,大明哥详细阐述了Netty核心组件的基本原理及核心API的使用,但是那些只是API的使用,且只有一个简单的helloworld的demo,没有一个demo来完整演示客户端与服务端之间的交互。这篇文章就完整演示客户端与服务端的交互,场景:智障客户(zzkf)。如果有小伙伴对Netty的核心组件还不是很清晰的话,可以移步相关文章再复习下:Netty入门—要想掌握Netty,你必须知道它的这些核心组件Netty入门—Bootstrap,一切从这里开始Netty入门—ByteBuf,Netty数据传输的载体Netty入门—Channel,把握Netty通信的命门Netty入门—Cha
在上篇文章(Netty入门—ChannelHandler,Netty的数据加工厂)提到ChannelHandler虽然是一个好的打工人,但是在我们实际业务线中,他不可能一个人干所有的活啊,毕竟都21世纪了,我们是要讲究分工的。所以Netty就需要一个好的组织者将这些ChannelHandler组织起来,形成一个条完整,高效的业务线,这个组织者就是ChannelPipeline。ChannelPipeline概述pipeline翻译为管道、流水线,在Netty这个大工厂中,ChannelPipeline就像一条流水线,数据流过ChannelPipeline,被一步一步地加工,最后得到一个成熟的工
经过前面几篇文章的介绍,我们掌握了Netty的5个核心组件,但是有了这5个核心组件Netty这个工厂还是无法很好的运转,因为缺少了一个最核心的组件:EventLoop,它是Netty中最最核心的组件,也是Netty最精华的部分,它负责Netty中I/O事件的分发,也就是说,这个事件谁来做,它说了算。再谈Reactor线程模型要想弄明白Netty的EventLoop,我们就必须先理解Reactor线程模型,Netty高性能的奥秘就在于Reactor线程模型。线程模型的优劣直接决定了系统的性能,一个好的线程模型比不好的线程模型性能会高出好多倍。而目前主流的网络框架选择的线程模型几乎都是I/O多路复
上篇文章(Netty入门—Bootstrap,一切从这里开始),我们了解了Netty的第一个核心组件:Bootstrap,它是Netty程序的开端。今天我们来熟悉Netty的第二个组件:ByteBuf,Netty数据传输的载体。在Netty中,数据的读写都是以ByteBuf为单位进行交互的。为什么要造轮子?在学习JavaNIO的时候,JavaNIO有一个原生的ByteBuffer,为什么Netty不直接使用原生的,要重复造一个呢?因为不好用啊。为什么不好用呢?因为JavaNIO的ByteBuffer有一些设计上的缺陷和痛点。我们先看ByteBuffer内部结构。JavaNIO的ByteBuff
上篇文章(Netty入门—要想掌握Netty,你必须知道它的这些核心组件)大明哥阐述了Netty的整体结构,从这篇文章开始大明哥就将这个整体进行拆分讲解,今天是第一个核心组件:Bootstrap。一句话来概括Bootstrap,无论是Netty的客户端还是服务端程序,都是从这里开始的。在Netty入门—亘古不变的HelloWorld一文的demo中,我们首先创建一个ServerBootstrap对象(服务端)或者Bootstrap对象(客户端),然后调用他们的各个方法进行组装整个Netty服务端和客户端,从代码中我们可以看出这两个类是一个辅助类,用来辅助服务端或者客户端初始化和启动的。Boot
在上篇文章(Netty入门—亘古不变的HelloWorld)中,我们简单认识了开发一个Netty服务端和客户端代码的主要步骤了,在这几大步骤中我们基本上可以看出Netty的几个核心组件。在真正进入Netty的学习之前,我们非常有必要先对这些组件进行一个整体的认识,对于Netty入门阶段的讲解,大明哥采用整体—>分解—>总结的模式来阐述。对于一头牛,我们需要先知道这是一头牛,了解这头牛有哪些组织,然后再把这些组织一个一个地拆开来认识,清楚里面每一个组织的功能,最后再将这些组织组合成一头牛,是不是就会清晰很多。Bootstrap:引导器Bootstrap的意思是引导,一个Netty应用
这篇文章我们正式开始学习Netty,在入门之前我们还是需要了解什么是Netty。什么是Netty为什么很多人都推崇Javaboy去研究Netty?Netty这么高大上,它到底是何方神圣?用官方的话说:Netty是一款异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络IO程序。为什么要使用Netty呢?因为使用原生的JavaNIO非常不爽,它存在一系列的问题,比如:使用JavaNIO需要了解很多概念,而且API非常繁琐。使用JavaNIO编程复杂,一不小心就会Bug横飞。开发工作量和难度也很大,例如我们要处理断开重连、网络闪断、半包读写、网络拥塞、异常处理,等等异常情况,
上一个死磕Java专栏【死磕NIO】(当然写的不是很好,争取今年将它重写一遍)是死磕Netty的铺垫,对于我们Java程序员而言,我们在实际开发过程一般都不会直接使用JavaNIO作为我们的网络编程框架,因为写出一套高质量的JavaNIO程序并不是一件容易的事,除了JavaNIO固有的复杂性和bug之外,作为NIO服务端,我们要处理的事情太多了,如网络闪断、客户端认证、消息编解码、半包读写,客户端一样也有很多复杂的事情要处理,所以如果我们对JavaNIO没有足够了解,没有足够的网络编程经验的话,利用JavaNIO来编写一个高性能的稳定网络编程框架并不是一件容易的事。所以我们一般都不会直接使用J