Class AbstractSockJsSession
java.lang.Object
org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession
- All Implemented Interfaces:
Closeable
,AutoCloseable
,SockJsSession
,WebSocketSession
- Direct Known Subclasses:
AbstractHttpSockJsSession
,WebSocketServerSockJsSession
An abstract base class for SockJS sessions implementing
SockJsSession
.- Since:
- 4.0
- Author:
- Rossen Stoyanchev, Sam Brannen
-
Field Summary
-
Constructor Summary
ConstructorDescriptionAbstractSockJsSession
(String id, SockJsServiceConfig config, WebSocketHandler handler, Map<String, Object> attributes) Create a new instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
final void
close()
Performs cleanup and notify theWebSocketHandler
.final void
close
(CloseStatus status) Performs cleanup and notify theWebSocketHandler
.final void
delegateConnectionClosed
(CloseStatus status) Invoked when the underlying connection is closed.void
void
void
delegateMessages
(String... messages) void
Disable the SockJS heartbeat, presumably because a higher-level protocol has heartbeats enabled for the session already.protected abstract void
disconnect
(CloseStatus status) Actually close the underlying WebSocket session or in the case of HTTP transports complete the underlying request.Return the map with attributes associated with the WebSocket session.getId()
Return a unique session identifier.protected SockJsMessageCodec
long
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()
Whether the underlying connection is open.protected void
protected void
final void
sendMessage
(WebSocketMessage<?> message) Send a WebSocket message: eitherTextMessage
orBinaryMessage
.protected abstract void
sendMessageInternal
(String message) toString()
void
tryCloseWithSockJsTransportError
(Throwable error, CloseStatus closeStatus) Close due to error arising from SockJS transport handling.protected void
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) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.web.socket.WebSocketSession
getAcceptedProtocol, getBinaryMessageSizeLimit, getExtensions, getHandshakeHeaders, getLocalAddress, getPrincipal, getRemoteAddress, getTextMessageSizeLimit, getUri, setBinaryMessageSizeLimit, setTextMessageSizeLimit
-
Field Details
-
DISCONNECTED_CLIENT_LOG_CATEGORY
Log category to use for network failure after a client has gone away. -
logger
-
responseLock
-
-
Constructor Details
-
AbstractSockJsSession
public AbstractSockJsSession(String id, SockJsServiceConfig config, WebSocketHandler handler, @Nullable Map<String, Object> attributes) Create a new instance.- Parameters:
id
- the session IDconfig
- the SockJS service configuration optionshandler
- the recipient of SockJS messagesattributes
- the attributes from the HTTP handshake to associate with the WebSocket session; the provided attributes are copied, the original map is not used.
-
-
Method Details
-
getId
Description copied from interface:WebSocketSession
Return a unique session identifier.- Specified by:
getId
in interfaceWebSocketSession
-
getMessageCodec
-
getSockJsServiceConfig
-
getAttributes
Description copied from interface:WebSocketSession
Return the map with attributes associated with the WebSocket session.On the server side the map can be populated initially through a
HandshakeInterceptor
. On the client side the map can be populated viaWebSocketClient
handshake methods.- Specified by:
getAttributes
in interfaceWebSocketSession
- Returns:
- a Map with the session attributes (never
null
)
-
sendMessage
Description copied from interface:WebSocketSession
Send a WebSocket message: eitherTextMessage
orBinaryMessage
.Note: The underlying standard WebSocket session (JSR-356) does not allow concurrent sending. Therefore, sending must be synchronized. To ensure that, one option is to wrap the
WebSocketSession
with theConcurrentWebSocketSessionDecorator
.- Specified by:
sendMessage
in interfaceWebSocketSession
- Throws:
IOException
- See Also:
-
sendMessageInternal
- Throws:
IOException
-
isNew
public boolean isNew() -
isOpen
public boolean isOpen()Description copied from interface:WebSocketSession
Whether the underlying connection is open.- Specified by:
isOpen
in interfaceWebSocketSession
-
isClosed
public boolean isClosed() -
close
Performs cleanup and notify theWebSocketHandler
.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceWebSocketSession
- Throws:
IOException
-
close
Performs cleanup and notify theWebSocketHandler
.- Specified by:
close
in interfaceWebSocketSession
- Throws:
IOException
-
getTimeSinceLastActive
public long getTimeSinceLastActive()Description copied from interface:SockJsSession
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.- Specified by:
getTimeSinceLastActive
in interfaceSockJsSession
-
updateLastActiveTime
protected void updateLastActiveTime()Should be invoked whenever the session becomes inactive. -
disableHeartbeat
public void disableHeartbeat()Description copied from interface:SockJsSession
Disable the SockJS heartbeat, presumably because a higher-level protocol has heartbeats enabled for the session already. It is not recommended to disable this otherwise, as it helps proxies to know the connection is not hanging.- Specified by:
disableHeartbeat
in interfaceSockJsSession
-
sendHeartbeat
- Throws:
SockJsTransportFailureException
-
scheduleHeartbeat
protected void scheduleHeartbeat() -
cancelHeartbeat
protected void cancelHeartbeat() -
isActive
public abstract boolean isActive()Polling and Streaming sessions periodically close the current HTTP request and wait for the next request to come through. During this "downtime" the session is still open but inactive and unable to send messages and therefore has to buffer them temporarily. A WebSocket session by contrast is stateful and remain active until closed. -
disconnect
Actually close the underlying WebSocket session or in the case of HTTP transports complete the underlying request.- Throws:
IOException
-
writeFrame
For internal use within a TransportHandler and the (TransportHandler-specific) session class.- Throws:
SockJsTransportFailureException
-
writeFrameInternal
- Throws:
IOException
-
delegateConnectionEstablished
- Throws:
Exception
-
delegateMessages
- Throws:
SockJsMessageDeliveryException
-
delegateConnectionClosed
Invoked when the underlying connection is closed.- Throws:
Exception
-
tryCloseWithSockJsTransportError
Close due to error arising from SockJS transport handling. -
delegateError
- Throws:
Exception
-
toString
-