nio框架中的多个Selector构造[Java编程]
本文“nio框架中的多个Selector构造[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
随着并发数目的提高,传统nio框架采取一个Selector来支持大量衔接事件的 管理和触发已经碰到瓶颈,因此目前各种nio框架的新版本都采取多个 Selector 并存的构造,由多个Selector均衡地去管理大量衔接.这里以Mina和Grizzly的实现为例.
在Mina 2.0中,Selector的管理是由 org.apache.mina.transport.socket.nio.NioProcessor来处理,每个 NioProcessor对象保存一个Selector,负责具体的select、wakeup、channel的 注册和撤消、读写事件的注册和判断、实际的IO读写操作等等,核心代码以下:
public NioProcessor(Executor executor) {
super(executor);
try {
// Open a new selector
selector = Selector.open();
} catch (IOException e) {
throw new RuntimeIoException("Failed to open a selector.", e);
}
}
protected int select(long timeout) throws Exception {
return selector.select(timeout);
}
protected boolean isInterestedInRead(NioSession session) {
SelectionKey key = session.getSelectionKey ();
return key.isValid() && (key.interestOps() & SelectionKey.OP_READ) != 0;
}
protected boolean isInterestedInWrite(NioSession session) {
SelectionKey key = session.getSelectionKey ();
return key.isValid() && (key.interestOps() & SelectionKey.OP_WRITE) != 0;
}
protected int read(NioSession session, IoBuffer buf) throws Exception {
return session.getChannel().read(buf.buf());
}
protected int write(NioSession session, IoBuffer buf, int length) throws Exception {
if (buf.remaining() <= length) {
return session.getChannel().write(buf.buf ());
} else {
int oldLimit = buf.limit();
buf.limit(buf.position() + length);
try {
return session.getChannel().write (buf.buf());
} finally {
buf.limit(oldLimit);
}
}
}
以上是“nio框架中的多个Selector构造[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |