У меня есть параллельная проблема, мой 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?
это мой конфиг настройки
@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();
}