如何使用 Spark Web Framework 将变量绑定到 websocket 路由路径中?

How to bind variables into websocket route paths using Spark Web Framework?

我正在尝试使用 Spark(java 网络框架)实现一个 websocket 服务器。我使用的是增加了对它的支持的 2.3 版本。

有什么方法可以像 http 路由一样将变量绑定到路由路径中?

例如/聊天/:城市

我想在用户之间创建对话渠道。如果可能的话,我怎样才能让它工作,我怎样才能检索变量?

只需将 ?userId=somekey 添加到您客户端的路径末尾即可。示例是将您的 websocket 路径初始化为 Spark.websocket("/chat") (server-side obvi.) 。然后让您的客户使用 /chat?userId=blah 来点击 URL。从服务器端,您将收到套接字的连接。从那里只需从套接字连接中获取传入的 URI,并使用 String userKey = session.getRemote().getQuery() 方法来提取字段。可能必须执行 user.split("=")[1] 才能获得值

(Whosebug 的回答对我不起作用,但为我指明了正确的方向):

我是这样获取参数的:

@OnWebSocketConnect
void onConnect(Session sockSession) throws Exception {
    Map<String, List<String>> params = sockSession.upgradeRequest.parameterMap;
    if(params != null && params.containsKey("city")) {
         // As the parameter's value is a List, we use 'get(0)'
         String city = params.get("city").get(0);
         ...
    }
    ...
}