public abstract class AbstractNioSession extends BigpipeSessionSupport
| 限定符和类型 | 类和说明 |
|---|---|
protected static class |
AbstractNioSession.AttachHolder
绑定在SocketKey上的任务占位符,它作为SocketKey的attachment而存在,是可以被重用的, 它包含需要发送的任务和需要被接收数据的上下文,在双工模式下二者是没有任何关联关系的
|
BigpipeSessionSupport.PIPE_TYPE| 限定符和类型 | 字段和说明 |
|---|---|
protected boolean |
duplexMode
是否采用tcp的双工模式
|
protected int |
publisherTryMaxCount |
protected Selector |
selector |
protected int |
selecttimeout |
protected com.baidu.bigpipe.transport.pub.AbstractNioSession.SessionRuntime |
sessionRuntime
当前session的运行时状态
|
protected SocketConf |
socketConf
socket连接的配置信息
|
protected SocketChannel |
tcpConnect |
protected AtomicBoolean |
wakenUp
copy from netty, 用于防止频繁的selector.wakeup
|
lifeController, pipeRuntime, reciever| 构造器和说明 |
|---|
AbstractNioSession() |
| 限定符和类型 | 方法和说明 |
|---|---|
protected abstract void |
configTask(WriteTask task,
boolean isNeedTcp)
config Task
|
protected void |
continueConfig(BigPipeConf conf)
继续应用配置信息,允许子类从
BigPipeConf获取私有配置信息并应用 |
protected abstract void |
ensureTcp()
保证构建tcp连接
|
int |
getPublisherTryMaxCount() |
Receiver |
getReciever() |
SocketConf |
getSocketConf() |
protected abstract void |
handleSelectorException(SelectionKey key)
当读写tcp出现异常时调用该方法来处理异常,一般来说如果有的任务处理出现异常,需要把任务恢复初始状态 然后关闭对应的channel
|
protected abstract void |
handleShutDown()
当任何调用方调用 shutdown 方法后,需要做的善后工作
|
protected abstract void |
handleTimeout()
探测当前是否有任务已经timeout,如果有需要处理这些超时任务
|
boolean |
isDuplexMode() |
protected TopicAddress |
lookupAddr(NameService ns,
String pipeletName)
从zk中根据pipeletName获取实例地址
|
protected abstract ReadState |
read(SelectionKey k)
从tcp channel中读取数据
|
protected void |
safeCloseTcpConnect()
封装关闭tcp channel,隐藏异常处理细节
|
void |
setDuplexMode(boolean duplexMode) |
void |
setPublisherTryMaxCount(int publisherTryMaxCount) |
void |
setReciever(Receiver reciever) |
void |
setSocketConf(SocketConf socketConf) |
void |
shutDown()
关闭当前session,如果有未执行完成的任务,会放弃执行并返回给调用方执行失败信息
|
void |
start(BigPipeConf conf)
开启selector.select线程
|
protected abstract WriteTask |
startNewTask()
获取下一个需要处理的新任务
|
protected void |
tryToStartNewTask()
尝试获取下一个需要处理的任务,并且开时处理这个任务
|
protected abstract WriteState |
write(SelectionKey k)
向tcp channel中写入数据
|
buildConnect, getPipeletOrQueueName, getType, handleFastFailed, init, openStream, setType, waitingForConnectprotected boolean duplexMode
protected volatile Selector selector
protected AtomicBoolean wakenUp
protected volatile int selecttimeout
protected int publisherTryMaxCount
protected final com.baidu.bigpipe.transport.pub.AbstractNioSession.SessionRuntime sessionRuntime
protected volatile SocketChannel tcpConnect
protected volatile SocketConf socketConf
public SocketConf getSocketConf()
public void setSocketConf(SocketConf socketConf)
public Receiver getReciever()
public void setReciever(Receiver reciever)
public boolean isDuplexMode()
public void setDuplexMode(boolean duplexMode)
public int getPublisherTryMaxCount()
public void setPublisherTryMaxCount(int publisherTryMaxCount)
public void shutDown()
protected void continueConfig(BigPipeConf conf)
BigpipeSessionSupportBigPipeConf获取私有配置信息并应用continueConfig 在类中 BigpipeSessionSupportconf - BigPipeConf 配置信息protected TopicAddress lookupAddr(NameService ns, String pipeletName) throws NameResolveException, org.apache.zookeeper.KeeperException
BigpipeSessionSupportlookupAddr 在类中 BigpipeSessionSupportns - NameService对象pipeletName - pipelet Name or queue NameInetAddressNameResolveException - 根据名字解析TopicAddress QueueAddress异常org.apache.zookeeper.KeeperException - zk异常protected abstract void handleSelectorException(SelectionKey key)
key - protected abstract void handleTimeout()
protected abstract WriteState write(SelectionKey k)
k - SelectionKey对象WriteStateprotected abstract ReadState read(SelectionKey k)
k - SelectionKey对象ReadStateprotected abstract void configTask(WriteTask task, boolean isNeedTcp)
task - taskisNeedTcp - isNeedTcpprotected abstract void ensureTcp()
protected abstract void handleShutDown()
public final void start(BigPipeConf conf)
start 在类中 BigpipeSessionSupportconf - 配置protected final void safeCloseTcpConnect()
safeCloseTcpConnect 在类中 BigpipeSessionSupportprotected void tryToStartNewTask()
Copyright © 2017. All rights reserved.