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

bit*_*ver 5 java java-websocket

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

ServerContainer container = WebSocketServerContainerInitializer.configureContext(context); //jetty
container.addEndpoint(MyWebSocketEndpoint.class);
Run Code Online (Sandbox Code Playgroud)

我想在初始化时传递一些参数MyWebSocketEndpoint然后我可以使用参数,比方说clientQueue,在我的onOpen方法中做类似的事情:

clientQueue.add(new Client(session));
Run Code Online (Sandbox Code Playgroud)

wer*_*ero 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_);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在以下位置注册ServerContainer

ClientQueue clientQueue = ...
ServerContainer container = ...
container.addEndpoint(ServerEndpointConfig.Builder
    .create(MyWebSocketEndpoint.class, "/") // the endpoint url
    .configurator(new MyWebSocketEndpointConfigurator(clientQueue _))
    .build());
Run Code Online (Sandbox Code Playgroud)