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)
您需要致电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)