Spingboot Websocket Stomp - PullRequest
       14

Spingboot Websocket Stomp

0 голосов
/ 05 марта 2020

Может кто-нибудь сказать мне, если реализация на стороне сервера использует stomp WebSocket, ожидается ли, что клиент также реализует stomp?

Я пытаюсь реализовать приложение с загрузочной пружиной, и я запутался, если мне нужно go с или без реализации Stomp. Из моего исследования я понимаю, что если вы хотите масштабировать приложение, лучше использовать Stomp и встроенный брокер (например, RabbitMQ), поскольку он будет обрабатывать сеансы, heartbeat et c. вместо посредника в памяти.

Примеры, доступные онлайн, просто показывают реализации с и без stomp.

Я в основном пытаюсь получить различные наборы данных из таблицы по запросу клиента и записать в WebSocket постоянно.

  1. Может ли кто-нибудь подтвердить, правильно ли мое понимание до сих пор?
  2. О каких важных вещах мне придется позаботиться, если я go с помощью stomp + websocket?

Обновление приведенного ниже варианта использования:

Мобильный телефон клиент будет отображать графики при входе пользователя. Там будут ссылки в левой панели, например. Продажи, Скидки и т. Д. c. который после нажатия, запрос достигнет сервера через канал websocket. Сервер проверит тип данных в запросе, сгенерирует модель, используя данные из БД, и запишет данные в веб-сокет.

Обновление кода - v1 MyWebSocketHandler:

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {

    Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    DashboardUtil dashboardutil;

    @Resource(name = "socketSessionsMap")
    private Map<String, WebSocketSession> socketSessionsMap;

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message)
            throws InterruptedException, IOException {

        try {
            //Gets the socket session from map and writes a json to that socket - did for testing purpose.
            socketSessionsMap.put("session", session);
            //String payload = message.getPayload();

            String jsonString = dashboardutil.getDataInJSON(); // gets hardcoded json model
            session.sendMessage(new TextMessage(jsonString));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {

    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {

    }
}

WebSecurityConfig:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private MyWebSocketHandler myWebSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
         registry.addHandler(myWebSocketHandler, "/socketHandler").setAllowedOrigins("*").withSockJS();

    }
}

1 Ответ

0 голосов
/ 05 марта 2020

Может кто-нибудь сказать мне, если реализация на стороне сервера использует stomp WebSocket, ожидается ли, что клиент также реализует stomp?

Вы можете зарегистрировать несколько обработчиков в конфигурации веб-сокета. Таким образом, теоретически вы можете предоставить обработчик для STOMP и еще один для простого веб-сокета. Если вы предоставите только обработчик STOMP, то произойдет сбой рукопожатия от стандартного клиента веб-сокетов.

Из моего исследования я понимаю, что если вы хотите масштабировать приложение, лучше использовать stomp и встроенный брокер (например, RabbitMQ.), который будет обрабатывать сессии, heartbeat et c. вместо брокера в памяти.

Это верно. STOMP также предлагает несколько более приятных функций, в частности, подписку на определенные конечные точки.

Я в основном пытаюсь получать разные наборы данных из таблицы по запросу клиента и непрерывно записывать в WebSocket.

Это действительно простое описание ... Вам следует подумать, нужно ли вам совместно использовать сеансы между несколькими экземплярами или вам нужно отправлять сообщения между сеансами веб-сокетов. Из вашего описания это звучит так, как будто вы просто принимаете соединение через веб-сокет и непрерывно отправляете данные sh клиенту. Если вы хотите масштабировать это приложение, вы можете просто поставить балансировщик нагрузки перед вашими экземплярами, и вы хорошо настроены на go.

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