Как я могу использовать ConcurrentWebSocketSessionDecorator для отправки моего сообщения через websocket - PullRequest
0 голосов
/ 12 июня 2019

У меня есть параллельная проблема, мой WebSocket использовал Spring-message, когда в моем чате много людей, он будет очень медленным.

Поэтому я пытаюсь найти способ, и я обнаружил некоторую проблему, когдаWebSocketSession, использующий sendMessage, имеет синхронизированный класс websocketServerSockJsSession

@Override
public void sendMessageInternal(String message) throws SockJsTransportFailureException {
    // Open frame not sent yet?
    // If in the session initialization thread, then cache, otherwise wait.
    if (!this.openFrameSent) {
        synchronized (this.initSessionLock) {
            if (!this.openFrameSent) {
                this.initSessionCache.add(message);
                return;
            }
        }
    }

, поэтому, если у них есть 200 чатов в секунду, он будет очень медленным,

Я обнаружил реализацию вызова WebSocketSession ConcurrentWebSocketSessionDecorator.

Но я не могу привести WebSocketServerSockJsSession к ConcurrentWebSocketSessionDecorator, я не могу найти, как настроить мой WebSocketSession.

Я не могу изменить sockJS.

Так как можноЯ делаю, если использую sockJS и хочу использовать метод ConcurrentWebSocketSessionDecorator?

- это еще один способ реализации ConcurrentWebSocketSessionDecorator sendMessage, или я могу сделать некоторые настройки свойств и заставить мой WebSocketSession обратиться к ConcurrentWebSocketSessionDecorator?enter image description here

это мой конфиг настройки

@Configuration
@EnableWebMvc
@EnableWebSocket
public class SpringWebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(webSocketHandler(), "/websocket/send").addInterceptors(new HandshakeInterceptor()).setAllowedOrigins("*");

    registry.addHandler(webSocketHandler(), "/websocket/sockjs").addInterceptors(new HandshakeInterceptor()).setAllowedOrigins("*").withSockJS();
}
...