【发布时间】:2015-06-27 12:14:05
【问题描述】:
我正在尝试找出一种好方法来组织我正在开发的javax.websocket 多人纸牌游戏。
我想将我的代码分成多个类,每个类都是ServerEndpoint。我的问题是我需要一种在他们之间共享会话数据的有效方式。
我在“/index”有一个索引,这是我目前为客户创建Player 对象的地方。我是这样设置的:
@ServerEndpoint("/index")
public class IndexEndpoint {
@OnOpen
public void openConnection(Session session) {
session.getUserProperties().put("player", new Player());
}
}
这行得通;我可以在整个IndexEndpoint 的其他地方访问Player 对象。
但是当我尝试从另一个端点访问用户属性时(在 JavaScript 中与 IndexEndpoint 建立连接后,等待 5 秒,然后在同一页面上打开到 LobbyEndpoint 的附加连接),我得到null.
@ServerEndpoint("/lobby")
public class LobbyEndpoint {
@OnOpen
public void openConnection(Session session) {
System.out.println(session.getUserProperties().get("player")); // prints null
}
}
这使我暗示会话数据很遗憾没有跨端点共享。
我有什么好的方法可以跨多个类共享 websocket 会话数据吗?
我想一种解决方案是只为所有用户连接一个 über 端点,它可以处理任何消息类型。然后该端点将消息数据委托给我的应用程序的其他部分。
但是我觉得这种设计会非常混乱和限制性。我希望使用@ServerEndpoint("/rooms/{room-id}") 和@PathParam("room-id") 之类的注释将端点专用于特定房间。因此,如果我使用的是单体端点,那么我就无法做到这一点;我无法知道连接用户是否是访问房间的用户。
【问题讨论】:
标签: java javascript session websocket