有没有办法在 Java 中创建动态 @ServerEndpoint 地址?

Rah*_*hul 5 java endpoint websocket server

例如,我有一个房间

public class Room {
   private int id;
   private Set<User> users;
}
Run Code Online (Sandbox Code Playgroud)

所以我希望它成为我的 websocket 应用程序的端点。但是可能有很多房间,我希望每个房间都有自己的 URI(例如,房间/1、房间/2 等)

显然,@ServerEnpoint 注释只允许常量。那么,有什么办法可以实现吗?

sin*_*air 5

像这样的东西:

@ServerEndpoint(value = "/rooms/{roomnumber}")
public class....

static Map<String, Session> openSessions = ...
@OnOpen
public void onConnectionOpen(final Session session, @PathParam("roomnumber") final String roomnumber, 
...
   //store roomnumber in session
   session.getUserProperties().put("roomnumber", roomnumber);
   openSessions.put( String.valueOf(session.getId()), session ) 
Run Code Online (Sandbox Code Playgroud)

仅向特定房间号码/客户发送消息:

// check if session corresponds to the roomnumber 
  for (Map.Entry<String, Session> entry : openSessions.entrySet()) {

    Session s = entry.getValue();
    if (s.isOpen() && s.getUserProperties().get("roomnumber").equals(roomnumber_you_want_to_address)) {
  ... 
Run Code Online (Sandbox Code Playgroud)

当客户端断开连接时:

 @OnClose
public void onConnectionClose(Session session) {
    openSessions.remove(session.getId());
}
Run Code Online (Sandbox Code Playgroud)