我正在开发一款多人在线游戏。我有以下问题:
当用户断开与服务器的连接时,他需要重新连接。在第一个连接处,在注册期间,注册模块会生成一个特殊的 ResponseDispatcher,它保存对连接 Channel 的引用。但是如果用户退出,这个 Channel 就失效了。尽管我可以检测到问题并清理资源,但我必须将注册模块和连接模块的引用存储到游戏模块,以便在用户授权并重新连接时更新 Channel。这在模块之间产生了很多相互依赖,并且很难维护。
我需要的是 Servlet Container 中的 HttpSession 之类的东西,这样我就可以从我的服务器的所有模块中获取对我的通道和会话资源的引用。
Servlet 中的 HttpSession 是如何实现的?它是一个存储所有 JSESSIONID 的全局 hashmap,容器从中确定返回哪个属性映射?如果它是一个全局 sysmbol 表,它是否会影响性能(即使 hashMap 的时间是 O(1),也可能存在会话修改,因此它可能必须同步)?
PS。也许这种情况下的一些设计模式建议也可以。