Skip to content

onDisconnect tricks

Jeanfrancois Arcand edited this page Jun 5, 2013 · 14 revisions

When the browser is closing the connection, it is possible, on the server side, to get notified and take appropriate steps. An application just have to register an AtmosphereResourceEventListener or WebSocketEventListener and implements the logic inside the onDisconnect method:

atmosphereResource.addListener( new AtmosphereResourceEventListenerAdapter () {
    /**
     * {@inheritDoc}
     */
    @Override
    public void onDisconnect(AtmosphereResourceEvent event) {
        logger.trace("", event);
        if (event.isCancelled()) {
             // Unexpected closing. The client didn't send the close message when request.enableProtocol
        } else if (event.event.isClosedByClient()) {
            // atmosphere.js has send the close message. 
            // This API is only with 1.1 and up
        }
    }
}

There are some restrictions for event.isCancelled():

  • If your application is using the BlockingIOCometSupport (Tomcat's default connector), onDisconnect will not be called.
  • If you are using Jetty (all version), onDisconnect will not be called when an unexpected network outage or when the browser hasn'nt send the close message.

The workaround, for those restrictions, it to fake detection by adding, win web/application.xml

        <init-param>
            <param-name>org.atmosphere.cpr.CometSupport.maxInactiveActivity</param-name>
            <param-value>30000</param-value>
        </init-param>

That will check if an connection has been idle more than 30 seconds and close it, like the disconnect detection would have done.

If you are using Atmosphere 1.0.12 and up, see also this page

Step by Step Tutorials

Concepts & Architecture

15 Minutes Tutorial

Advanced Topics

API

Known WebServer Issues

References

External Documentations

githalytics.com alpha

Clone this wiki locally