Как правильно настроить загрузку Apache2 и Spring для сокетных подключений? - PullRequest
0 голосов
/ 31 марта 2020

Я работаю над развертыванием проекта 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, я не могу сказать наверняка.

...