org.directwebremoting.impl
Class ThreadDroppingServerLoadMonitor

java.lang.Object
  extended by org.directwebremoting.impl.AbstractServerLoadMonitor
      extended by org.directwebremoting.impl.ThreadDroppingServerLoadMonitor
All Implemented Interfaces:
ServerLoadMonitor

public class ThreadDroppingServerLoadMonitor
extends AbstractServerLoadMonitor
implements ServerLoadMonitor

A smart implementation of ServerLoadMonitor, customized for Jetty. The ThreadDroppingServerLoadMonitor attempts to keep the hit rate down by increasing the disconnected time as usage increases.

Author:
Joe Walker [joe at getahead dot org]

Field Summary
protected  int connectedTime
          The time we are currently waiting before sending a browser away and asking it to reconnect.
protected  int disconnectedTime
          How long are we telling users to wait before they come back next
protected  HitMonitor hitMonitor
          Our record of the server loading
protected  int maxHitsPerSecond
          Static configuration data: The max number of hits per second.
protected static int SECONDS_MONITORED
          We are recording the number of hits in the last 5 seconds.
 
Fields inherited from class org.directwebremoting.impl.AbstractServerLoadMonitor
waitControllers
 
Constructor Summary
ThreadDroppingServerLoadMonitor()
           
 
Method Summary
 long getConnectedTime()
          What's the longest time that we should wait before asking the client to reconnect?
 int getDisconnectedTime()
          Controller for poll times.
 void setMaxHitsPerSecond(int maxHitsPerSecond)
           
 boolean supportsStreaming()
          If the server is not going to be streaming then we need to tell browsers to just use XHR rather than anything fancier.
 void threadWaitEnding(WaitController controller)
          A thread has just ended a wait period.
 void threadWaitStarting(WaitController controller)
          A thread is about to begin a wait period.
 
Methods inherited from class org.directwebremoting.impl.AbstractServerLoadMonitor
shutdown, shutdownRandomWaitControllers
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.directwebremoting.extend.ServerLoadMonitor
shutdown
 

Field Detail

maxHitsPerSecond

protected int maxHitsPerSecond
Static configuration data: The max number of hits per second. We increase the poll time to compensate and reduce the load. If this number is not at least half maxWaitingThreads then the USAGE_HIGH mode will not exist and the system will sublime from USAGE_LOW to USAGE_DIGG


connectedTime

protected int connectedTime
The time we are currently waiting before sending a browser away and asking it to reconnect.


disconnectedTime

protected int disconnectedTime
How long are we telling users to wait before they come back next


SECONDS_MONITORED

protected static final int SECONDS_MONITORED
We are recording the number of hits in the last 5 seconds. Maybe we should think about making this configurable.

See Also:
Constant Field Values

hitMonitor

protected HitMonitor hitMonitor
Our record of the server loading

Constructor Detail

ThreadDroppingServerLoadMonitor

public ThreadDroppingServerLoadMonitor()
Method Detail

supportsStreaming

public boolean supportsStreaming()
Description copied from interface: ServerLoadMonitor
If the server is not going to be streaming then we need to tell browsers to just use XHR rather than anything fancier.

Specified by:
supportsStreaming in interface ServerLoadMonitor
Returns:
true if the server will be supporting streaming

getConnectedTime

public long getConnectedTime()
Description copied from interface: ServerLoadMonitor
What's the longest time that we should wait before asking the client to reconnect?

Specified by:
getConnectedTime in interface ServerLoadMonitor
Returns:
The maximum client connected time

getDisconnectedTime

public int getDisconnectedTime()
Description copied from interface: ServerLoadMonitor
Controller for poll times.

TODO: We should probably get rid of this and leave it to PollHandler?

Specified by:
getDisconnectedTime in interface ServerLoadMonitor
Returns:
How long should this client wait until it next polls?

threadWaitStarting

public void threadWaitStarting(WaitController controller)
Description copied from interface: ServerLoadMonitor
A thread is about to begin a wait period. This can be used by implementations to dynamically adjust the poll timings.

Specified by:
threadWaitStarting in interface ServerLoadMonitor
Overrides:
threadWaitStarting in class AbstractServerLoadMonitor
Parameters:
controller - An object that we can use to control the wait

threadWaitEnding

public void threadWaitEnding(WaitController controller)
Description copied from interface: ServerLoadMonitor
A thread has just ended a wait period. This can be used by implementations to dynamically adjust the poll timings.

Specified by:
threadWaitEnding in interface ServerLoadMonitor
Overrides:
threadWaitEnding in class AbstractServerLoadMonitor
Parameters:
controller - An object that we can use to control the wait

setMaxHitsPerSecond

public void setMaxHitsPerSecond(int maxHitsPerSecond)
Parameters:
maxHitsPerSecond - the maxHitsPerSecond to set