diff --git a/pom.xml b/pom.xml index eb19adb..8f2d4de 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 1.5.7.RELEASE + 1.5.10.RELEASE com.charego diff --git a/server/src/main/java/lingo/server/WebSocketConfig.java b/server/src/main/java/lingo/server/WebSocketConfig.java index 701d7e3..5206b7c 100644 --- a/server/src/main/java/lingo/server/WebSocketConfig.java +++ b/server/src/main/java/lingo/server/WebSocketConfig.java @@ -3,6 +3,8 @@ package lingo.server; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.ChannelRegistration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @@ -25,7 +27,9 @@ public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry registry) { - registry.enableSimpleBroker("/topic"); + registry.enableSimpleBroker("/topic") + .setTaskScheduler(heartbeatScheduler()) + .setHeartbeatValue(heartbeatValue()); registry.setApplicationDestinationPrefixes("/app", "/user"); registry.setUserDestinationPrefix("/user"); } @@ -36,4 +40,17 @@ public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { registry.addEndpoint("/stomp"); } + private TaskScheduler heartbeatScheduler() { + // Single thread unless/until more threads are needed + final ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + taskScheduler.setPoolSize(1); + taskScheduler.setThreadNamePrefix("Keep-Alive-"); + taskScheduler.initialize(); + return taskScheduler; + } + + private long[] heartbeatValue() { + return new long[] { 25000, 25000 }; + } + } diff --git a/server/src/main/resources/static/client.js b/server/src/main/resources/static/client.js index a762687..2c7a481 100644 --- a/server/src/main/resources/static/client.js +++ b/server/src/main/resources/static/client.js @@ -280,6 +280,8 @@ function main() { } client = Stomp.client(`${webSocketProtocol}://${location.host}/stomp`); + client.heartbeat.outgoing = 25000; // send PING every 25 seconds + client.heartbeat.incoming = 0; // do NOT want PONGs from server client.connect({}, afterConnected, function(errorMessage) { addChatAnnouncement(errorMessage); addChatAnnouncement('Please reload the page!'); diff --git a/server/src/main/resources/static/index.html b/server/src/main/resources/static/index.html index 46b4ca8..2dec598 100644 --- a/server/src/main/resources/static/index.html +++ b/server/src/main/resources/static/index.html @@ -5,7 +5,7 @@ Lingo - +