Netty5源码分析(一)

Netty是一个高性能、异步事件驱动的NIO框架。作为当前最流行的NIO框架,Netty在大数据分布式计算、游戏行业、通信行业等都获得了广泛应用,一些著名开源组件也是基于Netty的NIO框架构建。本文对Netty的NIO封装源码略作分析,知其然知其所以然。

Netty服务端

相比于BIO,NIO的开发要复杂的多,因此开发出稳定高性能的异步通信框架一直是个难题。Netty为了对开发者屏蔽NIO通信的底层细节,对底层NIO网络通信做了封装,使开发者只需关注自己的业务实现,降低开发工作量和开发难度。

首先我们来看example模块中的EchoServer,这是一个典型的Netty服务端应用。我们来分析服务启动的过程。

......

阅读全文(http://www.lchml.com/blog/2016/01/07/netty1.html)

时间: 2024-10-19 18:17:24

Netty5源码分析(一)的相关文章

Netty5源码分析(八) -- 总结

这个系列通过七篇文章,结合Netty5的原代码 1. 分析了服务器绑定端口的过程,从整体上可以看到Netty执行的流程和主要组件 2. 分析了Netty的线程模型,解析了Reactor模式.很多人都不理解这块,被EventLoop的名称和复杂的类层次所迷惑 3. 通过比较使用Java原生的NIO API来编程的流程,再分析了Netty是如何把这些基本流程封装地,进一步地理清了Netty的封装思路 4. 分析了Netty的事件分发模型,描述了inbound,outbound事件模型,以及Pipel

Netty5源码分析(五) -- ByteBuf缓冲区

Netty的ByteBuf缓冲区实现地比Java本身的ByteBuffer更加灵活,方便.它的类结构也比较复杂,这里只说ByteBuf核心的几个要点. 1. 最重要的是要理解为什么要ByteBuf这个组件.主要还是因为基于select / poll / epoll这种IO多路复用技术的NIO是非阻塞同步IO的模型,由于是同步IO,需要用户线程自己来处理IO的读写,由于是非阻塞的,每次调用read, write读写的字节数是不确定的,所以非阻塞同步IO必须有缓冲区这个组件来保存每次读写的中间状态,

Netty5源码分析(七) -- 异步执行Future和Promise

java.util.concurrent.Future是Java提供的接口,表示异步执行的状态,Future的get方法会判断任务是否执行完成,如果完成就返回结果,否则阻塞线程,直到任务完成. // Java FutureTask.get() public V get() throws InterruptedException, ExecutionException { int s = state; if (s <= COMPLETING) s = awaitDone(false, 0L); r

netty源码分析

1.Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.也就是说,Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发. 2.目前netty有3个版本netty3.netty4.netty5.3个版

Netty5源码解析

Netty5源码解析 今天让我来总结下netty5的服务端代码. 服务端(ServerBootstrap) 示例代码如下: import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel

TeamTalk源码分析之login_server

login_server是TeamTalk的登录服务器,负责分配一个负载较小的MsgServer给客户端使用,按照新版TeamTalk完整部署教程来配置的话,login_server的服务端口就是8080,客户端登录服务器地址配置如下(这里是win版本客户端): 1.login_server启动流程 login_server的启动是从login_server.cpp中的main函数开始的,login_server.cpp所在工程路径为server\src\login_server.下表是logi

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

HashMap与TreeMap源码分析

1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Java这么久,也写过一些小项目,也使用过TreeMap无数次,但到现在才明白它的实现原理).因此本着"不要重复造轮子"的思想,就用这篇博客来记录分析TreeMap源码的过程,也顺便瞅一瞅HashMap. 2. 继承结构 (1) 继承结构 下面是HashMap与TreeMap的继承结构: pu

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线