2016-06-14 92 views
4

我現在正在使用javax.websocket.* API,但我不知道如何在Internet上搜索後使用一些構造函數參數初始化Endpoint如何使用構造函數參數初始化WebSocket端點

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

我想初始化MyWebSocketEndpoint時,那麼我就可以使用該參數通過一些參數,比如clientQueue,在我onOpen方法做這樣的事情:

clientQueue.add(new Client(session)); 

回答

3

你需要調用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());