如何将参数/属性传递给JSR-356 WebSocket客户端(@ClientEndpoint)?

时间:2014-03-20 11:34:36

标签: java websocket jsr356

我想为容器实例化的WebSocket客户端端点添加一些额外的属性以进行分组/统计。我用JSR-356创建了一个客户端WebSocket端点:

Session session = container.connectToServer( MyClientEndpoint.class , uri );

我想将一些对象传递给SessionMyClientEndpoint实例:

@ClientEndpoint
public class MyClientEndpoint {

    @OnOpen
    public void onWebSocketConnect( Session sess ) {
       ...i need my param here...
    } 

    ... @OnMessage, @OnClose, @OnError handlers...
}

因为 MyClientEndpoint实例是由容器实例化的(在我的例子中 - Jetty),我不能只在构造函数中传递参数。另外,我无法在Session用户属性中设置我的参数:

Session session = container.connectToServer( ClientSocket.class , uri ); session.getUserProperties().put( "group", this);

因为我在@OnOpen处理程序中没有我的财产,而且我无法保证在任何"group"电话之前将@OnMessage属性设置为

如何以允许我在容器实例化的@ClientEndpoint对象中使用其他对象的方式连接到JSR-356 WebSocket?

1 个答案:

答案 0 :(得分:0)

实际上,我们不会被迫对@ClientEndpoint个实例进行容器实例化。我们可以传递我们的自定义实例:

ClientSocket socket = new ClientSocket( ANY PARAMS WE WANT );
Session session = container.connectToServer( socket , uri );