public abstract class AbstractSockJsService extends java.lang.Object implements SockJsService, SockJsConfiguration
SockJsService implementations. Provides configuration
support, SockJS path resolution, and processing for static SockJS requests (e.g.
"/info", "/iframe.html", etc). Sub-classes are responsible for handling transport
requests.
It is expected that this service is mapped correctly to one or more prefixes such as
"/echo" including all sub-URLs (e.g. "/echo/**"). A SockJS service itself is generally
unaware of request mapping details but nevertheless must be able to extract the SockJS
path, which is the portion of the request path following the prefix. In most cases,
this class can auto-detect the SockJS path but you can also explicitly configure the
list of valid prefixes with setValidSockJsPrefixes(String...).
| Constructor and Description |
|---|
AbstractSockJsService(TaskScheduler scheduler) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
addCacheHeaders(ServerHttpResponse response) |
protected void |
addCorsHeaders(ServerHttpRequest request,
ServerHttpResponse response,
HttpMethod... httpMethods) |
protected void |
addNoCacheHeaders(ServerHttpResponse response) |
long |
getDisconnectDelay()
Return the amount of time in milliseconds before a client is considered disconnected.
|
long |
getHeartbeatTime()
The amount of time in milliseconds when the server has not sent any
messages and after which the server should send a heartbeat frame to the
client in order to keep the connection from breaking.
|
java.lang.String |
getName() |
java.lang.String |
getSockJsClientLibraryUrl()
The URL to the SockJS JavaScript client library.
|
int |
getStreamBytesLimit()
Streaming transports save responses on the client side and don't free
memory used by delivered messages.
|
TaskScheduler |
getTaskScheduler()
A scheduler instance to use for scheduling heart-beat messages.
|
protected abstract void |
handleRawWebSocketRequest(ServerHttpRequest request,
ServerHttpResponse response,
WebSocketHandler webSocketHandler) |
void |
handleRequest(ServerHttpRequest request,
ServerHttpResponse response,
WebSocketHandler handler)
TODO
|
protected abstract void |
handleTransportRequest(ServerHttpRequest request,
ServerHttpResponse response,
java.lang.String sessionId,
TransportType transportType,
WebSocketHandler webSocketHandler) |
boolean |
isJsessionIdCookieRequired()
Whether setting JSESSIONID cookie is necessary.
|
boolean |
isWebSocketEnabled()
Whether WebSocket transport is enabled.
|
protected void |
sendMethodNotAllowed(ServerHttpResponse response,
java.util.List<HttpMethod> httpMethods) |
void |
setDisconnectDelay(long disconnectDelay)
The amount of time in milliseconds before a client is considered
disconnected after not having a receiving connection, i.e.
|
AbstractSockJsService |
setHeartbeatTime(long heartbeatTime) |
AbstractSockJsService |
setJsessionIdCookieRequired(boolean jsessionIdCookieRequired)
Some load balancers do sticky sessions, but only if there is a JSESSIONID
cookie.
|
void |
setName(java.lang.String name)
A unique name for the service mainly for logging purposes.
|
AbstractSockJsService |
setSockJsClientLibraryUrl(java.lang.String clientLibraryUrl)
Transports which don't support cross-domain communication natively (e.g.
|
AbstractSockJsService |
setStreamBytesLimit(int streamBytesLimit) |
void |
setValidSockJsPrefixes(java.lang.String... prefixes)
Use this property to configure one or more prefixes that this SockJS service is
allowed to serve.
|
void |
setWebSocketsEnabled(boolean webSocketsEnabled)
Some load balancers don't support websockets.
|
protected boolean |
validateRequest(java.lang.String serverId,
java.lang.String sessionId,
java.lang.String transport) |
protected final Log logger
public AbstractSockJsService(TaskScheduler scheduler)
public void setName(java.lang.String name)
public java.lang.String getName()
public void setValidSockJsPrefixes(java.lang.String... prefixes)
This property is not strictly required. In most cases, the SockJS path can be auto-detected since the initial request from the SockJS client is of the form "{prefix}/info". Assuming the SockJS service is mapped correctly (e.g. using Ant-style pattern "/echo/**") this should work fine. This property can be used to configure explicitly the prefixes this service is allowed to service.
prefixes - the prefixes to use; prefixes do not need to include the portions
of the path that represent Servlet container context or Servlet path.public AbstractSockJsService setSockJsClientLibraryUrl(java.lang.String clientLibraryUrl)
By default this is set to point to "https://d1fxtkz8shb9d2.cloudfront.net/sockjs-0.3.4.min.js".
public java.lang.String getSockJsClientLibraryUrl()
setSockJsClientLibraryUrl(String)public AbstractSockJsService setStreamBytesLimit(int streamBytesLimit)
public int getStreamBytesLimit()
SockJsConfigurationThe default value is 128K (i.e. 128 * 1024).
getStreamBytesLimit in interface SockJsConfigurationpublic AbstractSockJsService setJsessionIdCookieRequired(boolean jsessionIdCookieRequired)
Set this option to indicate if a JSESSIONID cookie should be created. The default value is "true".
public boolean isJsessionIdCookieRequired()
setJsessionIdCookieRequired(boolean)public AbstractSockJsService setHeartbeatTime(long heartbeatTime)
public long getHeartbeatTime()
SockJsConfigurationThe default value is 25,000 (25 seconds).
getHeartbeatTime in interface SockJsConfigurationpublic TaskScheduler getTaskScheduler()
SockJsConfigurationgetTaskScheduler in interface SockJsConfigurationpublic void setDisconnectDelay(long disconnectDelay)
The default value is 5000.
public long getDisconnectDelay()
public void setWebSocketsEnabled(boolean webSocketsEnabled)
The default value is "true".
public boolean isWebSocketEnabled()
setWebSocketsEnabled(boolean)public final void handleRequest(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler) throws java.io.IOException, TransportErrorException
handleRequest in interface SockJsServicerequest - response - sockJsPath - java.lang.Exceptionjava.io.IOExceptionTransportErrorExceptionprotected abstract void handleRawWebSocketRequest(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler) throws java.io.IOException
java.io.IOExceptionprotected abstract void handleTransportRequest(ServerHttpRequest request, ServerHttpResponse response, java.lang.String sessionId, TransportType transportType, WebSocketHandler webSocketHandler) throws java.io.IOException, TransportErrorException
java.io.IOExceptionTransportErrorExceptionprotected boolean validateRequest(java.lang.String serverId,
java.lang.String sessionId,
java.lang.String transport)
protected void addCorsHeaders(ServerHttpRequest request, ServerHttpResponse response, HttpMethod... httpMethods)
protected void addCacheHeaders(ServerHttpResponse response)
protected void addNoCacheHeaders(ServerHttpResponse response)
protected void sendMethodNotAllowed(ServerHttpResponse response, java.util.List<HttpMethod> httpMethods) throws java.io.IOException
java.io.IOException