后台
自带buff
这个作者很懒,什么都没留下…
展开
-
后台开发技术(2)--接入层设计
通常把跟客户端直连的服务器称为接入服务器,一个或多个接入服务器构成的接入层。接入层有以下功能:维护与客户端之间的网络连接,管理客户端的网络状态。 接收客户端请求,将请求转发到业务层,转发业务层发给客户端的数据。 就近接入,负载均衡,优化网络体验。这里可以发现,如果把接入层跟业务层合并也可以实现以上的功能,而且节省了实现功能2需要的工作量,根据简单性原则,接入层不应该被独立出来。对于一个功...原创 2019-10-24 15:13:53 · 523 阅读 · 0 评论 -
后台开发技术(1)--概述
说到后台开发,首选就有一个问题:什么是后台开发。就我理解,就是做服务器端开发。在服务器端运行着不同功能的服务,有直接与客户端连接的,有实现某一特定业务的比如用户注册登录,有数据存储的如基于mysql,memcached,redis等做的存储系统,除此之外还有一些满足运维监控系统,运营统计系统等。那么后台开发需要哪些技术呢?回答这个问题之前先来看看一般的后台系统架构,如下图所示:后台系...原创 2019-10-17 09:51:54 · 552 阅读 · 1 评论 -
netty源码解析(4.0)-14 Channel NIO实现:读取数据
本章分析Nio Channel的数据读取功能的实现。 Channel读取数据需要Channel和ChannelHandler配合使用,netty设计数据读取功能包括三个要素:Channel, EventLoop和ChannelHandler。Channel有个read方法,这个方法不会直接读取数据,它的作用是通知持有当前channel的eventLoop可以从这个这个channel读取数据了...原创 2019-08-22 16:31:09 · 518 阅读 · 0 评论 -
netty源码解析(4.0)-16 ChannelHandler概览
本章开始分析ChannelHandler实现代码。ChannelHandler是netty为开发者提供的实现定制业务的主要接口,开发者在使用netty时,最主要的工作就是实现自己的ChannelHandler。ChannelHandler在设计上需要和ChannelPipeline配合共同实现pipeline的事件传递能力,这要求ChannelHandler需要实现一些固定的基本功能。由于...原创 2019-09-03 16:56:26 · 133 阅读 · 0 评论 -
netty源码解析(4.0)-17 ChannelHandler: IdleStateHandler实现
io.netty.handler.timeout.IdleStateHandler功能是监测Channel上read, write或者这两者的空闲状态。当Channel超过了指定的空闲时间时,这个Handler会触发一个IdleStateEvent事件。 在第一次检测到Channel变成active状态时向EventExecutor中提交三个延迟任务: ReaderIdleT...原创 2019-09-17 16:03:23 · 222 阅读 · 0 评论 -
netty源码解析(4.0)-18 ChannelHandler: codec--编解码框架
编解码框架和一些常用的实现位于io.netty.handler.codec包中。 编解码框架包含两部分:Byte流和特定类型数据之间的编解码,也叫序列化和反序列化。不类型数据之间的转换。 下图是编解码框架的类继承体系: 其中MessageToByteEncoder和ByteToMessageDecoder是实现了序列化和反序列化框架。 MessageToMessage是不同类...原创 2019-09-24 14:56:24 · 170 阅读 · 0 评论 -
netty源码解析(4.0)-20 ChannelHandler: 自己实现一个自定义协议的服务器和客户端
本章不会直接分析Netty源码,而是通过使用Netty的能力实现一个自定义协议的服务器和客户端。通过这样的实践,可以更深刻地理解Netty的相关代码,同时可以了解,在设计实现自定义协议的过程中需要解决的一些关键问题。 本周章涉及到的代码可以从github上下载:https://github.com/brandonlyg/tinytransport.git。设计协议 本章...原创 2019-09-30 13:49:34 · 353 阅读 · 0 评论 -
netty源码解析(4.0)-22 ByteBuf的I/O
整个ByteBuf框架的抽象实现分为两部分:ByteBuf接口的抽象实现:AbstractByteBuf, AbstractReferenceCountedByteBuf。分配器ByteBufAllocator接口的抽象实现: AbstractByteBufAllocator。ByteBuf接口的抽象实现AbstractByteBuf&...原创 2019-10-04 10:13:11 · 148 阅读 · 0 评论 -
netty源码解析(4.0)-23 ByteBuf内存管理:分配和释放
ByteBuf内存分配和释放由具体实现负责,抽象类型只定义的内存分配和释放的时机。 内存分配分两个阶段: 第一阶段,初始化时分配内存。第二阶段: 内存不够用时分配新的内存。ByteBuf抽象层没有定义第一阶段的行为,但定义了第二阶段的方法: public abstract ByteBuf capacity(int newCapacity) 这个方法负责分配一个长度为...原创 2019-10-05 15:14:50 · 311 阅读 · 0 评论 -
netty源码解析(4.0)-13 Channel NIO实现: 关闭和清理
Channel提供了3个方法用来实现关闭清理功能:disconnect,close,deregister。本章重点分析这个3个方法的功能的NIO实现。 disconnect实现: 断开连接 disconnect方法的调用栈如下:1 io.netty.channel.AbstractChannel#disconnect()2 io.netty.channel.Defau...原创 2019-08-20 14:57:41 · 793 阅读 · 0 评论 -
netty源码解析(4.0)-12 Channel NIO实现:channel初始化
创建一个channel实例,并把它register到eventLoopGroup中之后,这个channel然后处于inactive状态,仍然是不可用的。只有在bind或connect方法调用成功之后才能正常。因此bind或connect算是channel初始化的最后一步,本章这就重点分析这两个功能的实现。 接下来的代码分析如果没有特别说明,都是以NioSocketChannel为例。...原创 2019-08-14 16:32:09 · 144 阅读 · 0 评论 -
netty源码解析(4.0)-5 线程模型-EventExecutorGroup框架
上一章讲了EventExecutorGroup的整体结构和原理,这一章我们来探究一下它的具体实现。EventExecutorGroup和EventExecutor接口io.netty.util.concurrent.EventExecutorGroupjava.util.concurrent.ScheduledExecutorServiceEventExecutorGroup继承了...原创 2019-01-08 15:49:09 · 975 阅读 · 0 评论 -
netty源码解析(4.0)-6 线程模型-IO线程EventLoopGroup和NIO实现(一)
接口定义io.netty.channel.EventLoopGroup extends EventExecutorGroup 方法 说明 ChannelFuture register(Channel channel) 把一个channel注册到一个EventLoop ChannelFuture reg...原创 2019-01-15 13:48:18 · 268 阅读 · 0 评论 -
netty源码解析(4.0)-7 线程模型-IO线程EventLoopGroup和NIO实现(二)
把NIO事件转换成对channel unsafe的调用或NioTask的调用processSelectedKeys()方法是处理NIO事件的入口:private void processSelectedKeys() {if (selectedKeys != null) {processSelectedKeysOptimized();} else {processSelect...原创 2019-01-23 09:30:15 · 211 阅读 · 1 评论 -
netty源码解析(4.0)-8 ChannelPipeline的设计
io.netty.channel.ChannelPipeline设计原理 上图中,为了更直观地展示事件处理顺序, 故意有规律地放置两种handler的顺序,实际上ChannelInboundHandler和ChanneOutboundHandler的顺序可以是任意,取决于用户调用add方法把handler方在哪里。 ChannelPipeline的特性: ...原创 2019-01-30 11:01:33 · 140 阅读 · 0 评论 -
netty源码解析(4.0)-9 ChannelPipleline的默认实现-链表管理
io.netty.channel.DefaultChannelPipeline implements ChannelPiplelineDefaultChannelPiple给出了ChannelPipleline的默认实现。ChannelPipleline是一个双向链表,本章的内容是分析默认实现中双向链表的实现。双向列表的的数据结构 DefaultChannelPiple使...原创 2019-03-28 16:04:28 · 141 阅读 · 0 评论 -
netty源码解析(4.0)-10 ChannelPipleline的默认实现--事件传递及处理
事件触发、传递、处理是DefaultChannelPipleline实现的另一个核心能力。在前面在章节中粗略地讲过了事件的处理流程,本章将会详细地分析其中的所有关键细节。这些关键点包括:事件触发接口和对应的ChannelHandler处理方法。 inbound事件的传递。 outbound事件的传递。 ChannelHandler的eventExecutor的分配。 ...原创 2019-03-28 16:08:56 · 256 阅读 · 0 评论 -
netty源码解析(4.0)-11 Channel NIO实现-概览
结构设计 Channel的NIO实现位于io.netty.channel.nio包和io.netty.channel.socket.nio包中,其中io.netty.channel.nio是抽象实现,io.netty.channel.socket.nio最终实现。下面是Channel NIO相关类的派生图: NIO实现最终派生出3个类型NioServerSocketChannel实...原创 2019-07-29 16:06:12 · 161 阅读 · 0 评论 -
ThreadPoolExecutor代码解析
派生体系java.util.concurrent ThreadPoolExecutor AbstractExecutorService ExecutorService Executor 这个类是Executor框的核心实现,它的名字向我们表明,它是使用thread pool实现的。这个thread pool主要解决了两个问题:执行大量...原创 2019-01-02 21:52:33 · 155 阅读 · 0 评论