- 浏览: 12742 次
- 性别:
- 来自: 杭州
最新评论
文章列表
ChannelHandler是处理业务逻辑的代码所在。下面首先分析下ChannelHandler的体系结构,然后重点分析几个有意思的Handler:IdleStateHandler、ExceptionHandler1.ChannelHandler在Netty中的位置ChannelHandler分upstreamChannelHandler和downstreamChannelHandler,分别 ...
1.网络模型
Netty实现了非常经典的多reactor模型其中mainReactor是对应的Boss类,它负责接收客户端新来的连接。它使用了线程池1,有多个Boss对象供绑定多个地址进行监听,这些地址均匀分配到各个Boss上。默认只使用一个Boss对象监听。
subReactor对应Worker类,它负责监听由Boss类accept的socket的读写事件。它使用了另外一个线程池2,有多个Worker类处理这些socket,socket均匀分布在各个worker上。每个worker线程读取消息后,同步调用相应的解码、处理器,待处理完毕后才返回。因此如果业务处理器是非常耗时的非计算 ...
在前面已经说明了在接收新连接时,将向worker注册默认的READ事件。然后worker开始阻塞select监听事件。
发送消息的情况。
这种情况常常是由DownstreamHandler主动发起,在对接收的消息处理后主动发送消息ctx.sendMessage,由内向外经过由DownstreamHandler和encode组成的过滤链,在链的尽头由NioServerSocketPipelineSink处理MessageEvent事件。
1.首先将事件放入channel中的writeBufferQueue中。
MessageEvent event = (MessageEvent) e;
...
处理客户端新连接请求的方法从org.jboss.netty.channel.socket.nio.AbstractNioSelector.run()开始分析。
NioServerBoss是AbstractNioSelector的子类,处理服务器端接收新请求的处理类selector。如果有多个selector,可以创建bosspool时设置多个selector实例, ...
下文将剖析ServerBootstrap.bindAsync()方法所涉及到的流程。
1.概念
ChannelHandler分ChannelUpstreamHandler和ChanneldownstreamHandler,前者指向服务器接收事件的调用处理器,后者是服务器由内而外发送事件的事件处理器。
上下行消息传递方法介绍
sendUpstream()方法表发由外向内传递事件,
public void sendUpstream(ChannelEvent e) {
DefaultChannelHandlerContext head = getActualUpstreamCont ...
今天开始接触Netty这个NIO框架,由与MINA同一作者创作的框架,在看过User Guide 3.6之后,API风格与使用方式与MINA2大致类似。作为学习新框架的起始,先来几个Hello World程序吧。
看API依然是基于Reactor模型,程序分三部分
1.事件处理程序
主要包括对具体业务消息的处理,对各种连接状态的响应
public class TimeServerHandler extends SimpleChannelHandler {
@Override
public void channelConnected(C ...