org.jboss.netty.channel
接口 ChannelEvent

所有已知子接口:
ChannelStateEvent, ChildChannelStateEvent, ExceptionEvent, IdleStateEvent, MessageEvent, WriteCompletionEvent
所有已知实现类:
DefaultChildChannelStateEvent, DefaultExceptionEvent, DefaultIdleStateEvent, DefaultWriteCompletionEvent, DownstreamChannelStateEvent, DownstreamMessageEvent, UpstreamChannelStateEvent, UpstreamMessageEvent

public interface ChannelEvent

关联到通道的I/O事件或I/O请求.

一个ChannelEvent会被在ChannelPipeline中一系列的ChannelHandler 处理.

上游事件和下游事件,还有对它们的解释

每一个事件要么是下游事件要么是上游事件.如果一个事件从ChannelPipeline 里的第一个处理器流动转发到最后一个处理器,我们称为上游事件并说"事件往上游." 如果一个事件从 ChannelPipeline 里的最后一个处理器流动转发到第一个处理器,我们称为下游事件并说"事件往下游."(请参阅 ChannelPipeline里的图表了解更多解释.)

当你的服务器从客户端接收到一个消息,该接收到的消息关联的事件就是一个上游事件.但你的服务器发送或回复消息到客户端,该写请求关联的事件是一个下游事件. 对于客户端也是进站操作的结果如 InputStream.read(byte[]),下游事件通常是出站操作的请求 OutputStream.write(byte[]),Socket.connect(SocketAddress),和 Socket.close().

上游事件

事件名称 事件类型和条件 意思
"messageReceived" MessageEvent 从远程端接收到的消息对象(如. ChannelBuffer)
"exceptionCaught" ExceptionEvent 由I/O线程或处理器抛出的异常
"channelOpen" ChannelStateEvent
(state = OPEN, value = true)
打开Channel,但不绑定和连接
"channelClosed" ChannelStateEvent
(state = OPEN, value = false)
一个@link Channel}被关闭和所有关联资源被释放
"channelBound" ChannelStateEvent
(state = BOUND, value = SocketAddress)
Channel打开并绑定到本地地址,但不连接
"channelUnbound" ChannelStateEvent
(state = BOUND, value = null)
取消Channel绑定
"channelConnected" ChannelStateEvent
(state = CONNECTED, value = SocketAddress)
Channel打开,绑定到本地地址,并连接到远程地址
"writeComplete" WriteCompletionEvent 已完成写到远程端
"channelDisconnected" ChannelStateEvent
(state = CONNECTED, value = null)
Channel与远程断开连接
"channelInterestChanged" ChannelStateEvent
(state = INTEREST_OPS, no value)
ChannelinterestOps发送改变

还有两个附加事件只用于有子通道的父通道(如. ServerSocketChannel).

事件名称 事件类型和条件 意思
"childChannelOpen" ChildChannelStateEvent
(childChannel.isOpen() = true)
一个子Channel被打开(如. 一个父通道接受一个连接.)
"childChannelClosed" ChildChannelStateEvent
(childChannel.isOpen() = false)
一个子Channel被关闭(如.接受的连接被关闭.)

下游事件

事件名称 事件类型和条件 意思
"write" MessageEvent 发送消息到一个Channel.
"bind" ChannelStateEvent
(state = BOUND, value = SocketAddress)
绑定Channel到指定的本地地址.
"unbind" ChannelStateEvent
(state = BOUND, value = null)
取消Channel绑定.
"connect" ChannelStateEvent
(state = CONNECTED, value = SocketAddress)
连接Channel到指定的远程地址.
"disconnect" ChannelStateEvent
(state = CONNECTED, value = null)
断开Channel连接.
"close" ChannelStateEvent
(state = OPEN, value = false)
关闭Channel.

其他没有在这里描述的事件类型和条件将会被忽略和废弃. 请注意在表中没有"open".那是因为当一个ChannelChannelFactory创建后一直都是打开的.

值得一读的其他资源

请参阅ChannelHandlerChannelPipeline 文档了解一个事件如何在一个管道里流动和在你的应用程序里如何处理事件.


方法摘要
 Channel getChannel()
          返回关联到该事件的Channel.
 ChannelFuture getFuture()
          返回关联到该事件的ChannelFuture.
 

方法详细信息

getChannel

Channel getChannel()
返回关联到该事件的Channel.


getFuture

ChannelFuture getFuture()
返回关联到该事件的ChannelFuture. 如果事件是一个上游事件,则该方法会总是返回一个 SucceededChannelFuture ,因为事件已经发生.如果事件是一个下游事件(如.I/O请求),返回的future会在I/O请求成功或失败时收到通知.