|
|||||||||
上一个类 下一个类 | 框架 无框架 | ||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
public interface Channel
关系到一个网络套接字或组件能做的I/O操作,如读,写,连接,绑定.
一个通道提供给一个用户:
ChannelPipeline
.
在Netty里所有I/O操作都是异步的. 这意味着任何I/O操作都不会保证I/O请求在调用后完成,而是会立即返回.相反,会返回一个
ChannelFuture
实例 以当I/O请求成功、失败或取消时你可以收到通知.
一个通道都有一个用来创建它的父通道.比如,一个由ServerSocketChannel
接受返回的 SocketChannel
, 使用getParent()
会返回一个
ServerSocketChannel
作为它的父通道.
层次结构语义依赖该通道所在的传输实现.比如,你可以创建一个通道和它创建的子通道共享一个套接字连接,如BEEP和SSH.
一些传输对特定的传输公开附加的操作 . 可以向下转型一个Channel
为子类型调用这些操作.例如,
DatagramChannel
提供旧的I/O数据包传输,多播接入/离开操作.
通道有一个叫interestOps
的属性和
NIO SelectionKey
很相似 .它是由两个标识构成的 位域.
OP_READ
- 如果设置, 远程端发送来的消息会马上被读取. 如果没有设置, 来自远程端的消息不会被读取,直到
OP_READ
被再次设置为止 (如:读取挂起).OP_WRITE
- 如果设置, 一个写请求不会被发送到远程端,直到OP_WRITE
标识被清空并提交到队列里等待处理为止. 如果没有设置,写请求会立即从队列里移出.OP_READ_WRITE
- 这是OP_READ
和OP_WRITE
的组合,
这意味着只有写请求被挂起.OP_NONE
- 既不是OP_READ
)也不是OP_WRITE
,
这意味着只有读请求被挂起.
你可以设置或清空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 |
字段详细信息 |
---|
static final int OP_NONE
interestOps
值.
static final int OP_READ
interestOps
值.
static final int OP_WRITE
interestOps
值.
static final int OP_READ_WRITE
interestOps
值.
方法详细信息 |
---|
java.lang.Integer getId()
ChannelFactory getFactory()
ChannelFactory
.
Channel getParent()
null
.ChannelConfig getConfig()
ChannelPipeline getPipeline()
ChannelEvent
事件的ChannelPipeline
.
boolean isOpen()
true
.
boolean isBound()
true
.
boolean isConnected()
true
.
java.net.SocketAddress getLocalAddress()
SocketAddress
可以向下转型到更多的实体类型(如
InetSocketAddress
)获取更详细的信息.
java.net.SocketAddress getRemoteAddress()
SocketAddress
可以向下转型到更多的实体类型(如
InetSocketAddress
)获取更详细的信息.
null
.如果该通道没连接但可以从任意远程地址获取信息(如.
DatagramChannel
), 那么使用
MessageEvent.getRemoteAddress()
去检测接收消息的源地址会返回null.ChannelFuture write(java.lang.Object message)
DatagramChannel
)并且还没有连接, 你必须使用
write(Object, SocketAddress)
代替.否则,写请求会抛出
NotYetConnectedException
并且'exceptionCaught'
事件会被触发.
message
- 要写的消息
ChannelFuture
java.lang.NullPointerException
- 如果指定的消息为null则抛出异常ChannelFuture write(java.lang.Object message, java.net.SocketAddress remoteAddress)
DatagramChannel
)创建且还没有连接,你必须指定一个非空的地址.否则,写请求会抛出
NotYetConnectedException
并且'exceptionCaught'
事件会被触发.
message
- 要写的消息remoteAddress
- 消息要发送的远程地址.如果为null,则和方法write(Object)
相同.
ChannelFuture
java.lang.NullPointerException
- 如果指定的消息为null则抛出异常ChannelFuture bind(java.net.SocketAddress localAddress)
localAddress
- 绑定地址
ChannelFuture
java.lang.NullPointerException
- 如果指定的地址为null则抛出异常ChannelFuture connect(java.net.SocketAddress remoteAddress)
remoteAddress
- 连接的远程地址
ChannelFuture
java.lang.NullPointerException
- 如果指定的地址为null则抛出异常ChannelFuture disconnect()
ChannelFuture
ChannelFuture unbind()
ChannelFuture
ChannelFuture close()
ChannelFuture
ChannelFuture getCloseFuture()
ChannelFuture
. 该方法总是返回相同的future实例.
int getInterestOps()
interestOps
.
OP_NONE
, OP_READ
, OP_WRITE
, 或
OP_READ_WRITE
boolean isReadable()
return (getInterestOps() & OP_READ) != 0;
boolean isWritable()
return (getInterestOps() & OP_WRITE) == 0;
ChannelFuture setInterestOps(int interestOps)
interestOps
.
interestOps
- 新的interestOps
interestOps
改变成功或失败时能接收到通知的ChannelFuture
ChannelFuture setReadable(boolean readable)
int interestOps = getInterestOps(); if (readable) { setInterestOps(interestOps | OP_READ); } else { setInterestOps(interestOps & ˜OP_READ); }
readable
- true
则为恢复读操作,false为挂起读操作
interestOps
改变成功或失败时能接收到通知的ChannelFuture
|
|||||||||
上一个类 下一个类 | 框架 无框架 | ||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |