Support for RequestUpgradeStrategy + Lifecycle
Issue: SPR-15527
This commit is contained in:
parent
24b3614063
commit
1b0e95d7d8
|
@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
import org.springframework.context.Lifecycle;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
@ -43,7 +44,7 @@ import org.springframework.web.server.ServerWebExchange;
|
||||||
* @author Rossen Stoyanchev
|
* @author Rossen Stoyanchev
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class HandshakeWebSocketService implements WebSocketService {
|
public class HandshakeWebSocketService implements WebSocketService, Lifecycle {
|
||||||
|
|
||||||
private static final String SEC_WEBSOCKET_KEY = "Sec-WebSocket-Key";
|
private static final String SEC_WEBSOCKET_KEY = "Sec-WebSocket-Key";
|
||||||
|
|
||||||
|
@ -58,6 +59,8 @@ public class HandshakeWebSocketService implements WebSocketService {
|
||||||
|
|
||||||
private final RequestUpgradeStrategy upgradeStrategy;
|
private final RequestUpgradeStrategy upgradeStrategy;
|
||||||
|
|
||||||
|
private volatile boolean running = false;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor automatic, classpath detection based discovery of the
|
* Default constructor automatic, classpath detection based discovery of the
|
||||||
|
@ -104,6 +107,39 @@ public class HandshakeWebSocketService implements WebSocketService {
|
||||||
return this.upgradeStrategy;
|
return this.upgradeStrategy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRunning() {
|
||||||
|
return this.running;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
if (!isRunning()) {
|
||||||
|
this.running = true;
|
||||||
|
doStart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doStart() {
|
||||||
|
if (getUpgradeStrategy() instanceof Lifecycle) {
|
||||||
|
((Lifecycle) getUpgradeStrategy()).start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
if (isRunning()) {
|
||||||
|
this.running = false;
|
||||||
|
doStop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doStop() {
|
||||||
|
if (getUpgradeStrategy() instanceof Lifecycle) {
|
||||||
|
((Lifecycle) getUpgradeStrategy()).stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> handleRequest(ServerWebExchange exchange, WebSocketHandler webSocketHandler) {
|
public Mono<Void> handleRequest(ServerWebExchange exchange, WebSocketHandler webSocketHandler) {
|
||||||
|
|
|
@ -104,12 +104,15 @@ public abstract class AbstractWebSocketHandlerIntegrationTests {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public WebSocketHandlerAdapter handlerAdapter() {
|
public WebSocketHandlerAdapter handlerAdapter() {
|
||||||
RequestUpgradeStrategy strategy = createUpgradeStrategy();
|
return new WebSocketHandlerAdapter(webSocketService());
|
||||||
WebSocketService service = new HandshakeWebSocketService(strategy);
|
|
||||||
return new WebSocketHandlerAdapter(service);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract RequestUpgradeStrategy createUpgradeStrategy();
|
@Bean
|
||||||
|
public WebSocketService webSocketService() {
|
||||||
|
return new HandshakeWebSocketService(getUpgradeStrategy());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract RequestUpgradeStrategy getUpgradeStrategy();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +120,7 @@ public abstract class AbstractWebSocketHandlerIntegrationTests {
|
||||||
static class ReactorNettyConfig extends AbstractHandlerAdapterConfig {
|
static class ReactorNettyConfig extends AbstractHandlerAdapterConfig {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RequestUpgradeStrategy createUpgradeStrategy() {
|
protected RequestUpgradeStrategy getUpgradeStrategy() {
|
||||||
return new ReactorNettyRequestUpgradeStrategy();
|
return new ReactorNettyRequestUpgradeStrategy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,7 +129,7 @@ public abstract class AbstractWebSocketHandlerIntegrationTests {
|
||||||
static class RxNettyConfig extends AbstractHandlerAdapterConfig {
|
static class RxNettyConfig extends AbstractHandlerAdapterConfig {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RequestUpgradeStrategy createUpgradeStrategy() {
|
protected RequestUpgradeStrategy getUpgradeStrategy() {
|
||||||
return new RxNettyRequestUpgradeStrategy();
|
return new RxNettyRequestUpgradeStrategy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue