-
-
Notifications
You must be signed in to change notification settings - Fork 751
onDisconnect tricks
Jeanfrancois Arcand edited this page Jul 25, 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 implement the logic inside the onDisconnect method:
// resource is an instance of AtmosphereResource
resource.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.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
- Understanding Atmosphere
- Understanding @ManagedService
- Using javax.inject.Inject and javax.inject.PostConstruct annotation
- Understanding Atmosphere's Annotation
- Understanding AtmosphereResource
- Understanding AtmosphereHandler
- Understanding WebSocketHandler
- Understanding Broadcaster
- Understanding BroadcasterCache
- Understanding Meteor
- Understanding BroadcastFilter
- Understanding Atmosphere's Events Listeners
- Understanding AtmosphereInterceptor
- Configuring Atmosphere for Performance
- Understanding JavaScript functions
- Understanding AtmosphereResourceSession
- Improving Performance by using the PoolableBroadcasterFactory
- Using Atmosphere Jersey API
- Using Meteor API
- Using AtmosphereHandler API
- Using Socket.IO
- Using GWT
- Writing HTML5 Server-Sent Events
- Using STOMP protocol
- Streaming WebSocket messages
- Configuring Atmosphere's Classes Creation and Injection
- Using AtmosphereInterceptor to customize Atmosphere Framework
- Writing WebSocket sub protocol
- Configuring Atmosphere for the Cloud
- Injecting Atmosphere's Components in Jersey
- Sharing connection between Browser's windows and tabs
- Understanding AtmosphereResourceSession
- Manage installed services
- Server Side: javadoc API
- Server Side: atmosphere.xml and web.xml configuration
- Client Side: atmosphere.js API