2016-06-14 4 views
4

Ich benutze javax.websocket.* API jetzt, aber ich weiß nicht, wie ein Endpoint mit einigen Konstruktorparameter nach der Suche im Internet zu initialisieren.So initialisieren Sie einen WebSocket-Endpunkt mit Konstruktorparametern

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

ich durch einige Parameter übergeben werden soll, wenn MyWebSocketEndpoint initialisiert dann kann ich den Parameter verwenden, sagen clientQueue, in meinem onOpen Methode tun so etwas wie:

clientQueue.add(new Client(session)); 

Antwort

3

Sie müssen ServerContainer.addEndpoint(ServerEndpointConfig) anrufen und benötigen eine ServerEndpointConfig.Configurator Implementierung, um diese Arbeit zu machen.

zunächst eine benutzerdefinierte ServerEndpointConfig.Configurator Klasse erstellen, die für Ihren Endpunkt als Werk wirkt:

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_); 
    } 
} 

und dann registrieren Sie sich auf die ServerContainer:

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