java - 子协议(protocol)的 Websocket ServerEndpoint 实例

标签 java jakarta-ee websocket javax

基于 this question我想基于协商的子协议(protocol)创建一个服务器端点实例,以不同方式处理各种协议(protocol)消息。不幸的是 ServerEndpointConfig.Configurator.getEndpointInstance [ docs ] 不会让我访问任何相关 session 数据来获取协商的子协议(protocol),因此我可以实例化不同的类。

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();
        // ...
    }
}

知道如何解决这个问题,或者是否有任何被广泛接受的做法来处理不同的子协议(protocol)?我很难在 Web 上找到有关子协议(protocol)处理的示例实现或高级文档。

最佳答案

这是您要找的吗?

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

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

关于java - 子协议(protocol)的 Websocket ServerEndpoint 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41678578/

相关文章:

java - 从 xy 移动到另一点,我在时间 t 在哪里?

java - 将 List<String> 转换为 List<Integer>(或任何扩展 Number 的类)

java - Oracle AQ 按优先级相反的顺序传送 JMS 消息

java - 从 axis-1.3.jar 升级到 axis-1.4-osgi.jar 时出现 ClassNotFoundException

java - 如何多次读取 request.getInputStream()

具有负载平衡器可扩展性的 websockets

java - 如何激怒 "Application not responding"

spring - 如何在 Spring MVC Controller 中添加 Precall 方法

sockets - 是否可以仅通过客户端证书验证而不是服务器证书验证来建立 ssl 握手?

python - 类似 Python 2.7 + Bottle 框架的 socket.io