Package com.google.code.yanf4j.nio.impl
Class Reactor
- java.lang.Object
-
- java.lang.Thread
-
- com.google.code.yanf4j.nio.impl.Reactor
-
- All Implemented Interfaces:
java.lang.Runnable
public final class Reactor extends java.lang.Thread
Reactor pattern
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Reactor.PaddingAtomicBoolean
static class
Reactor.RegisterEvent
-
Field Summary
Fields Modifier and Type Field Description private Configuration
configuration
private NioController
controller
static int
DEFAULT_WAIT
private java.util.concurrent.locks.Lock
gate
private java.util.concurrent.atomic.AtomicInteger
jvmBug
static int
JVMBUG_THRESHHOLD
JVM bug thresholdstatic int
JVMBUG_THRESHHOLD1
static int
JVMBUG_THRESHHOLD2
private boolean
jvmBug0
private boolean
jvmBug1
private long
lastCheckTimestamp
private long
lastJVMBug
private static org.slf4j.Logger
log
private long
nextTimeout
private int
reactorIndex
private java.util.Queue<Reactor.RegisterEvent>
register
private java.nio.channels.Selector
selector
private SelectorManager
selectorManager
private int
selectTries
private java.util.concurrent.atomic.AtomicBoolean
wakenUp
-
Constructor Summary
Constructors Constructor Description Reactor(SelectorManager selectorManager, Configuration configuration, int index)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
beforeSelect()
private boolean
checkExpired(java.nio.channels.SelectionKey key, Session session)
private long
checkExpiredIdle(java.nio.channels.SelectionKey key, Session session)
private void
checkIdle(Session session)
private long
checkSessionTimeout()
Check session timeout or idlevoid
dispatchEvent(java.util.Set<java.nio.channels.SelectionKey> selectedKeySet)
Dispatch selected eventprivate void
dispatchSessionEvent(Session session, EventType event)
(package private) Configuration
getConfiguration()
int
getReactorIndex()
java.nio.channels.Selector
getSelector()
private Session
getSessionFromAttchment(java.nio.channels.SelectionKey key)
private boolean
isNeedCheckSessionIdleTimeout()
private boolean
isReactorThread()
private boolean
lookJVMBug(long before, int selected, long wait)
Look jvm bugvoid
postSelect(java.util.Set<java.nio.channels.SelectionKey> selectedKeys, java.util.Set<java.nio.channels.SelectionKey> allKeys)
private void
processRegister()
void
registerChannel(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)
private void
registerChannelNow(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)
void
registerSession(Session session, EventType event)
void
run()
(package private) void
selectNow()
(package private) void
unregisterChannel(java.nio.channels.SelectableChannel channel)
(package private) void
wakeup()
-
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
-
-
-
-
Field Detail
-
JVMBUG_THRESHHOLD
public static final int JVMBUG_THRESHHOLD
JVM bug threshold
-
JVMBUG_THRESHHOLD2
public static final int JVMBUG_THRESHHOLD2
-
JVMBUG_THRESHHOLD1
public static final int JVMBUG_THRESHHOLD1
-
DEFAULT_WAIT
public static final int DEFAULT_WAIT
- See Also:
- Constant Field Values
-
log
private static final org.slf4j.Logger log
-
jvmBug0
private boolean jvmBug0
-
jvmBug1
private boolean jvmBug1
-
reactorIndex
private final int reactorIndex
-
selectorManager
private final SelectorManager selectorManager
-
jvmBug
private final java.util.concurrent.atomic.AtomicInteger jvmBug
-
lastJVMBug
private long lastJVMBug
-
selector
private java.nio.channels.Selector selector
-
controller
private final NioController controller
-
configuration
private final Configuration configuration
-
wakenUp
private final java.util.concurrent.atomic.AtomicBoolean wakenUp
-
register
private java.util.Queue<Reactor.RegisterEvent> register
-
gate
private final java.util.concurrent.locks.Lock gate
-
selectTries
private int selectTries
-
nextTimeout
private long nextTimeout
-
lastCheckTimestamp
private long lastCheckTimestamp
-
-
Constructor Detail
-
Reactor
Reactor(SelectorManager selectorManager, Configuration configuration, int index) throws java.io.IOException
- Throws:
java.io.IOException
-
-
Method Detail
-
getSelector
public final java.nio.channels.Selector getSelector()
-
getReactorIndex
public int getReactorIndex()
-
run
public void run()
- Specified by:
run
in interfacejava.lang.Runnable
- Overrides:
run
in classjava.lang.Thread
-
lookJVMBug
private boolean lookJVMBug(long before, int selected, long wait) throws java.io.IOException
Look jvm bug- Parameters:
before
-selected
-wait
-- Returns:
- Throws:
java.io.IOException
-
dispatchEvent
public final void dispatchEvent(java.util.Set<java.nio.channels.SelectionKey> selectedKeySet)
Dispatch selected event- Parameters:
selectedKeySet
-
-
unregisterChannel
final void unregisterChannel(java.nio.channels.SelectableChannel channel) throws java.io.IOException
- Throws:
java.io.IOException
-
checkSessionTimeout
private final long checkSessionTimeout()
Check session timeout or idle- Returns:
-
isNeedCheckSessionIdleTimeout
private boolean isNeedCheckSessionIdleTimeout()
-
getSessionFromAttchment
private final Session getSessionFromAttchment(java.nio.channels.SelectionKey key)
-
isReactorThread
private final boolean isReactorThread()
-
beforeSelect
final void beforeSelect()
-
processRegister
private final void processRegister()
-
getConfiguration
Configuration getConfiguration()
-
postSelect
public final void postSelect(java.util.Set<java.nio.channels.SelectionKey> selectedKeys, java.util.Set<java.nio.channels.SelectionKey> allKeys)
-
checkExpiredIdle
private long checkExpiredIdle(java.nio.channels.SelectionKey key, Session session)
-
checkIdle
private final void checkIdle(Session session)
-
checkExpired
private final boolean checkExpired(java.nio.channels.SelectionKey key, Session session)
-
registerChannel
public final void registerChannel(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)
-
registerChannelNow
private void registerChannelNow(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)
-
wakeup
final void wakeup()
-
selectNow
final void selectNow() throws java.io.IOException
- Throws:
java.io.IOException
-
-