如何使用构造函数参数初始化WebSocket端点

时间:2016-06-14 15:26:20

标签: java java-websocket

我现在正在使用javax.websocket.* API,但我不知道如何在互联网上搜索后使用一些构造函数参数初始化Endpoint

ServerContainer container = WebSocketServerContainerInitializer.configureContext(context); //jetty
container.addEndpoint(MyWebSocketEndpoint.class);

我想在初始化MyWebSocketEndpoint时传递一些参数,然后我可以在我的clientQueue方法中使用参数,比如onOpen,执行以下操作:

clientQueue.add(new Client(session));

1 个答案:

答案 0 :(得分:4)

您需要致电ServerContainer.addEndpoint(ServerEndpointConfig)并需要ServerEndpointConfig.Configurator实施才能实现这一目标。

首先创建一个自定义ServerEndpointConfig.Configurator类,作为端点的工厂:

public class MyWebSocketEndpointConfigurator extends ServerEndpointConfig.Configurator {
    private ClientQueue clientQueue_;

    public MyWebSocketEndpoint(ClientQueue clientQueue) {
        clientQueue_ = clientQueue;
    }

    public <T> T getEndpointInstance(Class<T> clazz) throws InstantiationException {
        return (T)new MyWebSocketEndpoint(clientQueue_);
    }
}

然后在ServerContainer

上注册
ClientQueue clientQueue = ...
ServerContainer container = ...
container.addEndpoint(ServerEndpointConfig.Builder
    .create(MyWebSocketEndpoint.class, "/") // the endpoint url
    .configurator(new MyWebSocketEndpointConfigurator(clientQueue _))
    .build());