private void scheduleSessionTask() { synchronized (this.sessions) { if (this.sessionCleanupTask != null) { return; } this.sessionCleanupTask = getTaskScheduler().scheduleAtFixedRate(() -> { List<String> removedIds = new ArrayList<>(); for (SockJsSession session : this.sessions.values()) { try { if (session.getTimeSinceLastActive() > getDisconnectDelay()) { this.sessions.remove(session.getId()); removedIds.add(session.getId()); session.close(); } } catch (Throwable ex) { // Could be part of normal workflow (e.g. browser tab closed) logger.debug("Failed to close " + session, ex); } } if (logger.isDebugEnabled() && !removedIds.isEmpty()) { logger.debug("Closed " + removedIds.size() + " sessions: " + removedIds); } }, getDisconnectDelay()); } }
assertFalse(transportService.isSessionCookieNeeded()); assertEquals(2048, transportService.getStreamBytesLimit()); assertEquals(256, transportService.getDisconnectDelay()); assertEquals(1024, transportService.getHttpMessageCacheSize()); assertEquals(20, transportService.getHeartbeatTime());
@Test public void handleTransportRequestXhr() throws Exception { String sockJsPath = sessionUrlPrefix + "xhr"; setRequest("POST", sockJsPrefix + sockJsPath); this.service.handleRequest(this.request, this.response, sockJsPath, this.wsHandler); assertEquals(200, this.servletResponse.getStatus()); verify(this.xhrHandler).handleRequest(this.request, this.response, this.wsHandler, this.session); verify(taskScheduler).scheduleAtFixedRate(any(Runnable.class), eq(service.getDisconnectDelay())); assertEquals("no-store, no-cache, must-revalidate, max-age=0", this.response.getHeaders().getCacheControl()); assertNull(this.servletResponse.getHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); assertNull(this.servletResponse.getHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS)); }
private void scheduleSessionTask() { synchronized (this.sessions) { if (this.sessionCleanupTask != null) { return; } this.sessionCleanupTask = getTaskScheduler().scheduleAtFixedRate(() -> { List<String> removedIds = new ArrayList<>(); for (SockJsSession session : this.sessions.values()) { try { if (session.getTimeSinceLastActive() > getDisconnectDelay()) { this.sessions.remove(session.getId()); removedIds.add(session.getId()); session.close(); } } catch (Throwable ex) { // Could be part of normal workflow (e.g. browser tab closed) logger.debug("Failed to close " + session, ex); } } if (logger.isDebugEnabled() && !removedIds.isEmpty()) { logger.debug("Closed " + removedIds.size() + " sessions: " + removedIds); } }, getDisconnectDelay()); } }
private void scheduleSessionTask() { synchronized (this.sessions) { if (this.sessionCleanupTask != null) { return; } this.sessionCleanupTask = getTaskScheduler().scheduleAtFixedRate(() -> { List<String> removedIds = new ArrayList<>(); for (SockJsSession session : this.sessions.values()) { try { if (session.getTimeSinceLastActive() > getDisconnectDelay()) { this.sessions.remove(session.getId()); removedIds.add(session.getId()); session.close(); } } catch (Throwable ex) { // Could be part of normal workflow (e.g. browser tab closed) logger.debug("Failed to close " + session, ex); } } if (logger.isDebugEnabled() && !removedIds.isEmpty()) { logger.debug("Closed " + removedIds.size() + " sessions: " + removedIds); } }, getDisconnectDelay()); } }
assertSame(this.handshakeHandler, TestUtils.getPropertyValue(transportHandlers.get(TransportType.WEBSOCKET), "handshakeHandler")); assertEquals(4000L, sockJsService.getDisconnectDelay()); assertEquals(30000L, sockJsService.getHeartbeatTime()); assertEquals(10000, sockJsService.getHttpMessageCacheSize());