org.jboss.netty.channel
接口 Channel

所有超级接口:
java.lang.Comparable<Channel>
所有已知子接口:
DatagramChannel, LocalChannel, LocalServerChannel, ServerChannel, ServerSocketChannel, SocketChannel
所有已知实现类:
AbstractChannel, AbstractServerChannel

public interface Channel
extends java.lang.Comparable<Channel>

关系到一个网络套接字或组件能做的I/O操作,如读,写,连接,绑定.

一个通道提供给一个用户:

所有I/O操作都是异步的

在Netty里所有I/O操作都是异步的. 这意味着任何I/O操作都不会保证I/O请求在调用后完成,而是会立即返回.相反,会返回一个 ChannelFuture实例 以当I/O请求成功、失败或取消时你可以收到通知.

通道是分层的

一个通道都有一个用来创建它的父通道.比如,一个由ServerSocketChannel 接受返回的 SocketChannel, 使用getParent()会返回一个 ServerSocketChannel作为它的父通道.

层次结构语义依赖该通道所在的传输实现.比如,你可以创建一个通道和它创建的子通道共享一个套接字连接,如BEEPSSH.

向下转型访问传输特定的操作

一些传输对特定的传输公开附加的操作 . 可以向下转型一个Channel为子类型调用这些操作.例如, DatagramChannel提供旧的I/O数据包传输,多播接入/离开操作.

InterestOps

通道有一个叫interestOps的属性和 NIO SelectionKey很相似 .它是由两个标识构成的 位域.

你可以设置或清空OP_READ标识挂起和通过setReadable(boolean)恢复读操作.

请注意你并不能像设置或清空OP_READ那样挂起或恢复写操作. OP_WRITE 标识是只读的并仅提供简单意思告诉你待处理的写请求数量超过了阀值或如果你不处理写请求或导致OutOfMemoryError. 例如,NIO 套接字在NioSocketChannelConfig中使用了writeBufferLowWaterMark属性和 writeBufferHighWaterMark属性检测什么时候设置或清空 OP_WRITE标识.


字段摘要
static int OP_NONE
          用来通知只有读操作被挂起的interestOps值.
static int OP_READ
          用来通知读操作和写操作都不被挂起的interestOps值.
static int OP_READ_WRITE
          用来通知只有写操作被挂起的 interestOps值.
static int OP_WRITE
          用来通知读写操作都被挂起的interestOps值.
 
方法摘要
 ChannelFuture bind(java.net.SocketAddress localAddress)
          异步绑定该通道到指定的本地地址.
 ChannelFuture close()
          异步关闭通道.如果该通道已经绑定或连接,则会先断开连接和取消绑定.一旦该通道被关闭,将不能再次打开.在一个关闭的通道调用该方法不会有任何效果.
 ChannelFuture connect(java.net.SocketAddress remoteAddress)
          异步连接该通道到指定的远程地址.
 ChannelFuture disconnect()
          异步从当前远程地址断开连接.
 ChannelFuture getCloseFuture()
          返回一个当通道被关闭会接收通知的ChannelFuture.
 ChannelConfig getConfig()
          返回该通道的配置.
 ChannelFactory getFactory()
          返回创建该通道的ChannelFactory.
 java.lang.Integer getId()
          返回该通道唯一的整型ID.
 int getInterestOps()
          返回该通道当前的interestOps.
 java.net.SocketAddress getLocalAddress()
          返回该通道绑定的本地地址.返回的SocketAddress可以向下转型到更多的实体类型(如 InetSocketAddress)获取更详细的信息.
 Channel getParent()
          返回该通道的父通道.
 ChannelPipeline getPipeline()
          返回连接该通道用来处理ChannelEvent事件的ChannelPipeline.
 java.net.SocketAddress getRemoteAddress()
          返回该通道已经连接的远程地址,返回的SocketAddress可以向下转型到更多的实体类型(如 InetSocketAddress)获取更详细的信息.
 boolean isBound()
          只有该通道被绑定到一个本地地址才返回true.
 boolean isConnected()
          只有该通道被连接到一个远程地址才返回true.
 boolean isOpen()
          只有当该通道是打开的才返回true.
 boolean isReadable()
          只有当I/O线程可以从该通道读取消息时才返回true.该方法是以下代码的快捷方式: return (getInterestOps() & OP_READ) !
 boolean isWritable()
          只有当I/O线程可以执行请求立即写操作时才返回true.当该方法返回false时任何写操作都会被排队直到I/O线程准备处理队列的写请求为止.
 ChannelFuture setInterestOps(int interestOps)
          异步改变该通道的interestOps.
 ChannelFuture setReadable(boolean readable)
          异步挂起或恢复I/O线程的读操作.该方法是以下代码的快捷方式: int interestOps = getInterestOps(); if (readable) { setInterestOps(interestOps | OP_READ); } else { setInterestOps(interestOps & ˜OP_READ); }
 ChannelFuture unbind()
          异步取消与当前本地地址的绑定.
 ChannelFuture write(java.lang.Object message)
          异步返送消息到该通道.如果该通道是使用无连接传输创建的(如.
 ChannelFuture write(java.lang.Object message, java.net.SocketAddress remoteAddress)
          异步发送消息到该通道.它有一个附加的参数允许用户使用指定的远程地址代替当前远程地址来发送消息.
 
从接口 java.lang.Comparable 继承的方法
compareTo
 

字段详细信息

OP_NONE

static final int OP_NONE
用来通知只有读操作被挂起的interestOps值.

另请参见:
常量字段值

OP_READ

static final int OP_READ
用来通知读操作和写操作都不被挂起的interestOps值.

另请参见:
常量字段值

OP_WRITE

static final int OP_WRITE
用来通知读写操作都被挂起的interestOps值.

另请参见:
常量字段值

OP_READ_WRITE

static final int OP_READ_WRITE
用来通知只有写操作被挂起的 interestOps值.

另请参见:
常量字段值
方法详细信息

getId

java.lang.Integer getId()
返回该通道唯一的整型ID.


getFactory

ChannelFactory getFactory()
返回创建该通道的ChannelFactory.


getParent

Channel getParent()
返回该通道的父通道.

返回:
父通道. 如果该通道没有父通道则返回null.

getConfig

ChannelConfig getConfig()
返回该通道的配置.


getPipeline

ChannelPipeline getPipeline()
返回连接该通道用来处理ChannelEvent事件的ChannelPipeline.


isOpen

boolean isOpen()
只有当该通道是打开的才返回true.


isBound

boolean isBound()
只有该通道被绑定到一个本地地址才返回true.


isConnected

boolean isConnected()
只有该通道被连接到一个远程地址才返回true.


getLocalAddress

java.net.SocketAddress getLocalAddress()
返回该通道绑定的本地地址.返回的SocketAddress可以向下转型到更多的实体类型(如 InetSocketAddress)获取更详细的信息.

返回:
该通道的本地地址.如果没有绑定则返回null.

getRemoteAddress

java.net.SocketAddress getRemoteAddress()
返回该通道已经连接的远程地址,返回的SocketAddress可以向下转型到更多的实体类型(如 InetSocketAddress)获取更详细的信息.

返回:
该通道的远程地址.如果没有则为null.如果该通道没连接但可以从任意远程地址获取信息(如. DatagramChannel), 那么使用 MessageEvent.getRemoteAddress()去检测接收消息的源地址会返回null.

write

ChannelFuture write(java.lang.Object message)
异步返送消息到该通道.如果该通道是使用无连接传输创建的(如. DatagramChannel)并且还没有连接, 你必须使用 write(Object, SocketAddress)代替.否则,写请求会抛出 NotYetConnectedException并且'exceptionCaught'事件会被触发.

参数:
message - 要写的消息
返回:
返回当写请求成功或失败时能接收到通知的ChannelFuture
抛出:
java.lang.NullPointerException - 如果指定的消息为null则抛出异常

write

ChannelFuture write(java.lang.Object message,
                    java.net.SocketAddress remoteAddress)
异步发送消息到该通道.它有一个附加的参数允许用户使用指定的远程地址代替当前远程地址来发送消息. 如果该通道是使用无连接传输(如. DatagramChannel)创建且还没有连接,你必须指定一个非空的地址.否则,写请求会抛出 NotYetConnectedException并且'exceptionCaught'事件会被触发.

参数:
message - 要写的消息
remoteAddress - 消息要发送的远程地址.如果为null,则和方法write(Object)相同.
返回:
返回当写请求成功或失败时能接收到通知的ChannelFuture
抛出:
java.lang.NullPointerException - 如果指定的消息为null则抛出异常

bind

ChannelFuture bind(java.net.SocketAddress localAddress)
异步绑定该通道到指定的本地地址.

参数:
localAddress - 绑定地址
返回:
返回当绑定成功或失败时能接收到通知的ChannelFuture
抛出:
java.lang.NullPointerException - 如果指定的地址为null则抛出异常

connect

ChannelFuture connect(java.net.SocketAddress remoteAddress)
异步连接该通道到指定的远程地址.

参数:
remoteAddress - 连接的远程地址
返回:
返回当连接请求成功或失败时能接收到通知的ChannelFuture
抛出:
java.lang.NullPointerException - 如果指定的地址为null则抛出异常

disconnect

ChannelFuture disconnect()
异步从当前远程地址断开连接.

返回:
返回当断开连接请求成功或失败时能接收到通知的ChannelFuture

unbind

ChannelFuture unbind()
异步取消与当前本地地址的绑定.

返回:
返回当取消绑定成功或失败时能接收到通知的ChannelFuture

close

ChannelFuture close()
异步关闭通道.如果该通道已经绑定或连接,则会先断开连接和取消绑定.一旦该通道被关闭,将不能再次打开.在一个关闭的通道调用该方法不会有任何效果. 请注意该方法总是返回相同的future实例.

返回:
返回当关闭成功或失败时能接收到通知的ChannelFuture

getCloseFuture

ChannelFuture getCloseFuture()
返回一个当通道被关闭会接收通知的ChannelFuture. 该方法总是返回相同的future实例.


getInterestOps

int getInterestOps()
返回该通道当前的interestOps.

返回:
OP_NONE, OP_READ, OP_WRITE, 或 OP_READ_WRITE

isReadable

boolean isReadable()
只有当I/O线程可以从该通道读取消息时才返回true.该方法是以下代码的快捷方式:
 return (getInterestOps() & OP_READ) != 0;
 


isWritable

boolean isWritable()
只有当I/O线程可以执行请求立即写操作时才返回true.当该方法返回false时任何写操作都会被排队直到I/O线程准备处理队列的写请求为止. 该方法是以下代码的快捷方式:
 return (getInterestOps() & OP_WRITE) == 0;
 


setInterestOps

ChannelFuture setInterestOps(int interestOps)
异步改变该通道的interestOps.

参数:
interestOps - 新的interestOps
返回:
返回当interestOps改变成功或失败时能接收到通知的ChannelFuture

setReadable

ChannelFuture setReadable(boolean readable)
异步挂起或恢复I/O线程的读操作.该方法是以下代码的快捷方式:
 int interestOps = getInterestOps();
 if (readable) {
        setInterestOps(interestOps | OP_READ);
 } else {
        setInterestOps(interestOps & ˜OP_READ);
 }
 

参数:
readable - true则为恢复读操作,false为挂起读操作
返回:
返回当interestOps改变成功或失败时能接收到通知的ChannelFuture