#java #spring-boot #tomcat #websocket
#java #весенняя загрузка #tomcat #websocket
Вопрос:
Каков ожидаемый способ установки org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT для увеличения времени ожидания tomcat websocket? В документации Tomcat указано следующее:
Это можно изменить, установив свойство org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT в коллекции пользовательских свойств, прикрепленной к сеансу WebSocket.
WebSocketSession, который я вижу доступным в методе TextWebSocketHandler afterConnectionEstablished, не имеет пользовательских свойств. Итак, я предполагаю, что это не то, что означает документация. Глядя на TomcatRequestUpgradeStrategy, мне кажется, что он никогда не просматривает свойства пользователя конечной точки. Мне также не кажется, что вы можете перезаписать TomcatRequestUpgradeStrategy, поскольку AbstractHandshakeHandler имеет жестко заданное имя класса для TomcatRequestUpgradeStrategy.
Пожалуйста, помогите.
Ответ №1:
org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT
это свойство пользователя, которое вам нужно установить в API WebSocket Session
, а не в абстракциях Spring этого интерфейса.
Вы можете настроить его в afterConnectionEstablished
методе, приведя Spring WebSocketSession
к NativeWebSocketSession
и извлекая базовый сеанс API WebSocket:
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
if (session instanceof NativeWebSocketSession) {
final Session nativeSession = ((NativeWebSocketSession) session).getNativeSession(Session.class);
if (nativeSession != null) {
nativeSession.getUserProperties()
.put("org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT", 60_000L);
}
}
}