Какой URL-адрес клиента SockJs использовать при обслуживании пользовательского интерфейса на webpack-dev-server? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть следующий код на стороне клиента:

var sock = new SockJS('http://localhost:8443/quote-socket');
const stompClient = Stomp.over(sock);//connect using your client
stompClient.connect({}, onConnected, onError);
function onConnected() {
  stompClient.subscribe('/topic/prices', payload => {
    console.log('DATA COMING!');
    console.log(payload);
  });
  stompClient.send("ws/quote/FB",
      {},
      JSON.stringify({})
  );
}
function onError(error) {
  console.log('there is an error');
  console.log(error);
}

И это сторона загрузки Spring (т.е. сервера):

@Override
@MessageMapping("/quote/{symbol}")
@SendTo("/topic/prices")
public String getSingleQuote(@DestinationVariable("symbol") String symbol, HttpServletResponse response) {
    return "Hello";
}

И это конфигурация веб-сокета:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/ws");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/quote-socket").setAllowedOrigins("http://localhost:8080").withSockJS();
    }

}

Я вижу следующие журналы в консоли браузера:

Opening Web Socket...

Web Socket Opened...

>>> CONNECT
accept-version:1.0,1.1,1.2
heart-beat:10000,10000
Received data

<<< CONNECTED
heart-beat:0,0
version:1.2
content-length:0

connected to server undefined

>>> SUBSCRIBE
id:sub-0
destination:/topic/prices

>>> SEND
destination:ws/quote/FB
content-length:2

Но метод контроллера не вызывается, и я не вижу полезной нагрузки насторона браузера.В чем здесь проблема?

Обновление 1 Я обнаружил, что он должен использовать SockJs следующим образом:

var sock = new SockJS('api/quote-socket');

Но во время разработки я запускаю пользовательский интерфейсdev-сервер (webpack-dev-server) под другим портом, что означает, что мне нужно использовать протокол ws, а поскольку SockJS его не поддерживает, я должен использовать StopJS.client:

var url = "ws://localhost:8443/api/quote-socket";
var stompClient = Stomp.client(url);

Есть ли способ использовать ws на SockJs?Как мы должны использовать разные порты UI-сервера во время разработки, что кажется довольно распространенным явлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...