Я работаю над развертыванием проекта Spring Boot на AWS, но соединение с веб-сокетом не работает. Он отлично работает на моей локальной установке DEV, но не при его развертывании.
WebSocketConfig:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/play");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/plearnit-websocket")
.setAllowedOrigins("*")
.addInterceptors(new HttpHandshakeInterceptor())
.withSockJS();
}
}
Подключение клиента:
private _stompClient: CompatClient = Stomp.over(null);
this._stompClient =Stomp.over(() => SockJS(`${URL}/plearnit-websocket`, [], {sessionId: () =>
{return playLoginDTO.id;}}));
this._stompClient.connect({},
() => {
this._stompClient.subscribe(`/topic/actions/${playLoginDTO.code}`, (response: IResponse) => {
console.log(`RCVD: ${response.body}`)
this._onActionReceived(JSON.parse(response.body));
});
console.log(`Session ID: ${JSON.stringify(this._stompClient.webSocket.url)}`)
resolve();
},
() => {
reject("Unable to connect to server.")
});
apache2 / httpd.conf :
<VirtualHost *:80>
ServerName 18.217.197.108
ProxyPass / ajp://localhost:9090/
ProxyPassReverse / ajp://localhost:9090/
<Location /ws>
ProxyPass ws://localhost:9090/
ProxyPassReverse ws://localhost:9090/
</Location>
</VirtualHost>
Вот пошаговое описание происходящего:
Клиент отправляет: http://18.217.197.108/plearnit-websocket/info?t=1585669687277
Spring отвечает : {"entropy": 1927850572, "происхождение": [": "], "cookie_needed": true, "websocket": true}
клиент отправляет: ws: //18.217 .197.108 / plearnit-websocket / 745 / b5266e64-6d27-43e0-b4b4-6177a5caa84e / websocket
Spring запускает рукопожатие websocket.
Браузер выдает следующее сообщение: WebSocket закрывается перед подключением
Spring не завершает квитирование веб-сокета.
Клиент отправляет: http://18.217.197.108/plearnit-websocket/745/b5266e64-6d27-43e0-b4b4-6177a5caa84e/xhr_streaming?t=1585669688252
Spring жалуется, что WebsocketConnection еще не инициализировано.
Так что, мне кажется, проблема в рукопожатии, поскольку она никогда не завершается. Я чувствую, что httpd.conf в порядке, так как приложение получает соединение WS. Но, TBH, я не могу сказать наверняка.