public abstract class AbstractSockJsSession extends Object implements SockJsSession
SockJsSession.| Modifier and Type | Field and Description |
|---|---|
static String |
DISCONNECTED_CLIENT_LOG_CATEGORY
Log category to use on network IO exceptions after a client has gone away.
|
protected static Log |
disconnectedClientLogger
Separate logger to use on network IO failure after a client has gone away.
|
protected Log |
logger |
| Constructor and Description |
|---|
AbstractSockJsSession(String id,
SockJsServiceConfig config,
WebSocketHandler handler,
Map<String,Object> attributes)
Create a new instance.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
cancelHeartbeat() |
void |
close()
Close the WebSocket connection with status 1000, i.e.
|
void |
close(CloseStatus status)
Close the WebSocket connection with the given close status.
|
void |
delegateConnectionClosed(CloseStatus status)
Invoked in reaction to the underlying connection being closed by the remote side
(or the WebSocket container) in order to perform cleanup and notify the
WebSocketHandler. |
void |
delegateConnectionEstablished() |
void |
delegateError(Throwable ex) |
void |
delegateMessages(String[] messages) |
void |
disableHeartbeat()
Disable SockJS heartbeat, presumably because a higher level protocol has
heartbeats enabled for the session.
|
protected abstract void |
disconnect(CloseStatus status)
Actually close the underlying WebSocket session or in the case of HTTP
transports complete the underlying request.
|
Map<String,Object> |
getAttributes()
Return the map with attributes associated with the WebSocket session.
|
String |
getId()
Return a unique session identifier.
|
SockJsServiceConfig |
getSockJsServiceConfig() |
long |
getTimeSinceLastActive()
Return the time (in ms) since the session was last active, or otherwise
if the session is new, then the time since the session was created.
|
abstract boolean |
isActive()
Polling and Streaming sessions periodically close the current HTTP request and
wait for the next request to come through.
|
boolean |
isClosed() |
boolean |
isNew() |
boolean |
isOpen()
Return whether the connection is still open.
|
protected void |
scheduleHeartbeat() |
void |
sendHeartbeat() |
void |
sendMessage(WebSocketMessage<?> message)
Send a WebSocket message either
TextMessage or
BinaryMessage. |
protected abstract void |
sendMessageInternal(String message) |
String |
toString() |
void |
tryCloseWithSockJsTransportError(Throwable ex,
CloseStatus closeStatus)
Close due to error arising from SockJS transport handling.
|
protected void |
updateLastActiveTime()
Should be invoked whenever the session becomes inactive.
|
protected void |
writeFrame(SockJsFrame frame)
For internal use within a TransportHandler and the (TransportHandler-specific)
session class.
|
protected abstract void |
writeFrameInternal(SockJsFrame frame) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitgetAcceptedProtocol, getBinaryMessageSizeLimit, getExtensions, getHandshakeHeaders, getLocalAddress, getPrincipal, getRemoteAddress, getTextMessageSizeLimit, getUri, setBinaryMessageSizeLimit, setTextMessageSizeLimitprotected final Log logger
public static final String DISCONNECTED_CLIENT_LOG_CATEGORY
The Servlet API does not provide notifications when a client disconnects; see SERVLET_SPEC-44. Therefore network IO failures may occur simply because a client has gone away, and that can fill the logs with unnecessary stack traces.
We make a best effort to identify such network failures, on a per-server basis, and log them under a separate log category. A simple one-line message is logged at DEBUG level, while a full stack trace is shown at TRACE level.
disconnectedClientLogger,
Constant Field Valuesprotected static final Log disconnectedClientLogger
DISCONNECTED_CLIENT_LOG_CATEGORYpublic AbstractSockJsSession(String id, SockJsServiceConfig config, WebSocketHandler handler, Map<String,Object> attributes)
id - the session IDconfig - SockJS service configuration optionshandler - the recipient of SockJS messagesattributes - attributes from the HTTP handshake to associate with the WebSocket
session; the provided attributes are copied, the original map is not used.public String getId()
WebSocketSessiongetId in interface WebSocketSessionpublic SockJsServiceConfig getSockJsServiceConfig()
public Map<String,Object> getAttributes()
WebSocketSessionWhen the WebSocketSession is created, on the server side, the map can be
through a HandshakeInterceptor.
On the client side, the map can be populated by passing attributes to the
WebSocketClient handshake
methods.
getAttributes in interface WebSocketSessionpublic boolean isNew()
public boolean isOpen()
WebSocketSessionisOpen in interface WebSocketSessionpublic boolean isClosed()
public abstract boolean isActive()
public long getTimeSinceLastActive()
SockJsSessiongetTimeSinceLastActive in interface SockJsSessionprotected void updateLastActiveTime()
public void disableHeartbeat()
SockJsSessiondisableHeartbeat in interface SockJsSessionpublic void delegateConnectionEstablished()
throws Exception
Exceptionpublic void delegateMessages(String[] messages) throws SockJsMessageDeliveryException
SockJsMessageDeliveryExceptionpublic final void delegateConnectionClosed(CloseStatus status) throws Exception
WebSocketHandler. This is in contrast to close() that pro-actively
closes the connection.Exceptionpublic final void sendMessage(WebSocketMessage<?> message) throws IOException
WebSocketSessionTextMessage or
BinaryMessage.sendMessage in interface WebSocketSessionIOExceptionprotected abstract void sendMessageInternal(String message) throws IOException
IOExceptionpublic final void close()
throws IOException
session.close(CloseStatus.NORMAL);
Performs cleanup and notifies the WebSocketHandler.
close in interface WebSocketSessionIOExceptionpublic final void close(CloseStatus status) throws IOException
Performs cleanup and notifies the WebSocketHandler.
close in interface WebSocketSessionIOExceptionprotected abstract void disconnect(CloseStatus status) throws IOException
IOExceptionpublic void tryCloseWithSockJsTransportError(Throwable ex, CloseStatus closeStatus)
protected void writeFrame(SockJsFrame frame) throws SockJsTransportFailureException
SockJsTransportFailureExceptionprotected abstract void writeFrameInternal(SockJsFrame frame) throws IOException
IOExceptionpublic void sendHeartbeat()
throws SockJsTransportFailureException
SockJsTransportFailureExceptionprotected void scheduleHeartbeat()
protected void cancelHeartbeat()