Подтвердить что ты не робот

Экземпляр WebSocket ServerEndpoint по подпротоколу

Основываясь на этом вопросе, я бы хотел создать экземпляр конечной точки сервера на основе согласованного подпротокола для обработки различных сообщений протокола по-разному. К сожалению, ServerEndpointConfig.Configurator.getEndpointInstance [docs] не позволит мне получить доступ к каким-либо соответствующим данным сеанса для получения согласованного подпротола, чтобы я мог создавать разные классы.

public static class ServerEndpointConfigurator extends
        ServerEndpointConfig.Configurator {

    public ServerEndpointConfigurator()
    {
    }

    @Override
    public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest request, HandshakeResponse response) {
        // useful to work with session data in endpoint instance but not at getEndpointInstance
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        config.getUserProperties().put(HttpSession.class.getName(), httpSession);
    }

    @Override
    public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {

        // TODO get negotiated subprotocol and instantiate endpoint using switch case or factory

        return (T) new WebSocketControllerA();

        // or return (T) new WebSocketControllerB();
        // or return (T) new WebSocketControllerC();
        // ...
    }
}

Любая идея, как решить эту проблему, или есть общепринятые методы обработки различных подпротоколов? Мне трудно найти примеры реализации или расширенную документацию по обработке подпротоков в Интернете.

4b9b3361

Ответ 1

Это то, что вы ищете?

@ServerEndpoint("/ws")
public class MyWebSocket {

    @OnOpen 
    public void onOpen(Session session) {
        session.getNegotiatedSubprotocol();
    }