netty技术实现即时通信方案.docx
netty
netty是啥
netty是jboss下的是开源工程。一个封装Socket的jar。可以快速开发高性能,高可靠的网络效劳器与客户端程序。与apache下的mina是同一个作者〔TrustinLee〕,并且是优化版。
netty的优点
1.开发简单,完整的Doc和用户样例,适用于不同的协议。
2.基于灵活,可扩展的事件驱动模型。
3.可靠soket支持,高度可定制的线程模型。
4.更好的吞吐量,低延迟,节省资源,内部优化成熟,减少不必要的内存拷贝
5.能与android环境运行良好。
6.完整的SSL/TLS和STARTTLS的支持
Netty整体架构
Netty组件
?
ChannelFactory
Boss
Worker
Channel
ChannelEvent
Pipeline
ChannelContext
Handler
Sink
?
Server端核心类
NioServerSocketChannelFactory
NioServerBossPool?
NioWorkerPool
NioServerBoss
NioWorker
NioServerSocketChannel
NioAcceptedSocketChannel
DefaultChannelPipeline
NioServerSocketPipelineSink
Channels
?
?
ChannelFactory
Channel工厂,很重要的类
保存启动的相关参数
?
NioServerSocketChannelFactory
NioClientSocketChannelFactory
NioDatagramChannelFactory
?
这是Nio的,还有Oio和Local的
?
?
SelectorPool
?
Selector的线程池
?
NioServerBossPool默认线程数:1
NioClientBossPool???1
NioWorkerPool???2*Processor
NioDatagramWorkerPool
?
?
Selector
?
选择器,很核心的组件
?
NioServerBoss
NioClientBoss
NioWorker
NioDatagramWorker
?
?
Channel
?
通道
?
NioServerSocketChannel
NioClientSocketChannel
NioAcceptedSocketChannel
NioDatagramChannel
?
Sink
负责和底层的交互
如bind,Write,Close等
?
NioServerSocketPipelineSink
NioClientSocketPipelineSink
NioDatagramPipelineSink
?
Pipeline
负责维护所有的Handler
?
ChannelContext
一个Channel一个,是Handler和Pipeline的中间件
?
Handler
对Channel事件的处理器
?
?
ChannelPipeline
?
?
?
优秀的设计----事件驱动
?
?
优秀的设计----线程模型
案例
Server端:
package;
import;
import.*;
importorg.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import;
import;
import;
import;
/**
*GodBlessYou!
*Author:Fangniude
*Date:2013-07-15
*/
publicclassNettyServer{
publicstaticvoidmain(String[]args){
ServerBootstrapbootstrap=newServerBootstrap(newNioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));
//Setupthedefaulteventpipeline.
bootstrap.setPipelineFactory(newChannelPipelineFactory(){
@Override
public