Class AbstractHttpSockJsSession
- All Implemented Interfaces:
Closeable
,AutoCloseable
,SockJsSession
,WebSocketSession
- Direct Known Subclasses:
PollingSockJsSession
,StreamingSockJsSession
- Since:
- 4.0
- Author:
- Rossen Stoyanchev
-
Field Summary
Fields inherited from class org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession
DISCONNECTED_CLIENT_LOG_CATEGORY, logger, responseLock
-
Constructor Summary
ConstructorDescriptionAbstractHttpSockJsSession
(String id, SockJsServiceConfig config, WebSocketHandler wsHandler, Map<String, Object> attributes) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
disconnect
(CloseStatus status) Actually close the underlying WebSocket session or in the case of HTTP transports complete the underlying request.protected abstract void
Called when the connection is active and ready to write to the response.Return the selected sub-protocol to use.int
Get the configured maximum size for an incoming binary message.Determine the negotiated extensions.Return the headers used in the handshake request (nevernull
).Return the address on which the request was received.Return the SockJS buffer for messages stored transparently between polling requests.Return aPrincipal
instance containing the name of the authenticated user.Return the address of the remote client.int
Get the configured maximum size for an incoming text message.getUri()
Return the URI used to open the WebSocket connection.void
handleInitialRequest
(ServerHttpRequest request, ServerHttpResponse response, SockJsFrameFormat frameFormat) Handle the first request for receiving messages on a SockJS HTTP transport based session.protected abstract void
handleRequestInternal
(ServerHttpRequest request, ServerHttpResponse response, boolean initialRequest) Invoked when a SockJS transport request is received.void
handleSuccessiveRequest
(ServerHttpRequest request, ServerHttpResponse response, SockJsFrameFormat frameFormat) Handle all requests, except the first one, to receive messages on a SockJS HTTP transport based session.boolean
isActive()
Polling and Streaming sessions periodically close the current HTTP request and wait for the next request to come through.protected void
protected final void
sendMessageInternal
(String message) void
setAcceptedProtocol
(String protocol) Unlike WebSocket where sub-protocol negotiation is part of the initial handshake, in HTTP transports the same negotiation must be emulated and the selected protocol set through this setter.void
setBinaryMessageSizeLimit
(int messageSizeLimit) Configure the maximum size for an incoming binary message.void
setTextMessageSizeLimit
(int messageSizeLimit) Configure the maximum size for an incoming text message.protected void
writeFrameInternal
(SockJsFrame frame) Methods inherited from class org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession
cancelHeartbeat, close, close, delegateConnectionClosed, delegateConnectionEstablished, delegateError, delegateMessages, disableHeartbeat, getAttributes, getId, getMessageCodec, getSockJsServiceConfig, getTimeSinceLastActive, isClosed, isNew, isOpen, scheduleHeartbeat, sendHeartbeat, sendMessage, toString, tryCloseWithSockJsTransportError, updateLastActiveTime, writeFrame
-
Constructor Details
-
AbstractHttpSockJsSession
public AbstractHttpSockJsSession(String id, SockJsServiceConfig config, WebSocketHandler wsHandler, Map<String, Object> attributes)
-
-
Method Details
-
getUri
Description copied from interface:WebSocketSession
Return the URI used to open the WebSocket connection. -
getHandshakeHeaders
Description copied from interface:WebSocketSession
Return the headers used in the handshake request (nevernull
). -
getPrincipal
Description copied from interface:WebSocketSession
Return aPrincipal
instance containing the name of the authenticated user.If the user has not been authenticated, the method returns
null
. -
getLocalAddress
Description copied from interface:WebSocketSession
Return the address on which the request was received. -
getRemoteAddress
Description copied from interface:WebSocketSession
Return the address of the remote client. -
setAcceptedProtocol
Unlike WebSocket where sub-protocol negotiation is part of the initial handshake, in HTTP transports the same negotiation must be emulated and the selected protocol set through this setter.- Parameters:
protocol
- the sub-protocol to set
-
getAcceptedProtocol
Return the selected sub-protocol to use.- Returns:
- the protocol identifier, or
null
if no protocol was specified or negotiated successfully
-
getMessageCache
Return the SockJS buffer for messages stored transparently between polling requests. If the polling request takes longer than 5 seconds, the session is closed.- See Also:
-
isActive
public boolean isActive()Description copied from class:AbstractSockJsSession
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.- Specified by:
isActive
in classAbstractSockJsSession
-
setTextMessageSizeLimit
public void setTextMessageSizeLimit(int messageSizeLimit) Description copied from interface:WebSocketSession
Configure the maximum size for an incoming text message. -
getTextMessageSizeLimit
public int getTextMessageSizeLimit()Description copied from interface:WebSocketSession
Get the configured maximum size for an incoming text message. -
setBinaryMessageSizeLimit
public void setBinaryMessageSizeLimit(int messageSizeLimit) Description copied from interface:WebSocketSession
Configure the maximum size for an incoming binary message. -
getBinaryMessageSizeLimit
public int getBinaryMessageSizeLimit()Description copied from interface:WebSocketSession
Get the configured maximum size for an incoming binary message. -
getExtensions
Description copied from interface:WebSocketSession
Determine the negotiated extensions.- Returns:
- the list of extensions, or an empty list if no extension was specified or negotiated successfully
-
handleInitialRequest
public void handleInitialRequest(ServerHttpRequest request, ServerHttpResponse response, SockJsFrameFormat frameFormat) throws SockJsException Handle the first request for receiving messages on a SockJS HTTP transport based session.Long polling-based transports (e.g. "xhr", "jsonp") complete the request after writing the open frame. Streaming-based transports ("xhr_streaming", "eventsource", and "htmlfile") leave the response open longer for further streaming of message frames but will also close it eventually after some amount of data has been sent.
- Parameters:
request
- the current requestresponse
- the current responseframeFormat
- the transport-specific SocksJS frame format to use- Throws:
SockJsException
-
handleSuccessiveRequest
public void handleSuccessiveRequest(ServerHttpRequest request, ServerHttpResponse response, SockJsFrameFormat frameFormat) throws SockJsException Handle all requests, except the first one, to receive messages on a SockJS HTTP transport based session.Long polling-based transports (e.g. "xhr", "jsonp") complete the request after writing any buffered message frames (or the next one). Streaming-based transports ("xhr_streaming", "eventsource", and "htmlfile") leave the response open longer for further streaming of message frames but will also close it eventually after some amount of data has been sent.
- Parameters:
request
- the current requestresponse
- the current responseframeFormat
- the transport-specific SocksJS frame format to use- Throws:
SockJsException
-
handleRequestInternal
protected abstract void handleRequestInternal(ServerHttpRequest request, ServerHttpResponse response, boolean initialRequest) throws IOException Invoked when a SockJS transport request is received.- Parameters:
request
- the current requestresponse
- the current responseinitialRequest
- whether it is the first request for the session- Throws:
IOException
-
sendMessageInternal
- Specified by:
sendMessageInternal
in classAbstractSockJsSession
- Throws:
SockJsTransportFailureException
-
flushCache
Called when the connection is active and ready to write to the response. Subclasses should only call this method from a method where the "responseLock" is acquired.- Throws:
SockJsTransportFailureException
-
disconnect
Description copied from class:AbstractSockJsSession
Actually close the underlying WebSocket session or in the case of HTTP transports complete the underlying request.- Specified by:
disconnect
in classAbstractSockJsSession
-
resetRequest
protected void resetRequest() -
writeFrameInternal
- Specified by:
writeFrameInternal
in classAbstractSockJsSession
- Throws:
IOException
-