Java会话实现

Art*_*lev 5 java design-patterns servlets hashmap mmo

我正在开发一款多人在线游戏.我有以下问题:

当用户断开他/她与服务器的连接时,他需要重新连接.在第一次连接时,在注册期间,注册模块会生成一个特殊的ResponseDispatcher,它保存对连接Channel的引用.但是,如果用户注销,则此频道将变为无效.即使我可以检测到问题并清理资源,我也必须将注册模块和连接模块的引用存储到游戏模块,以便在用户授权并重新连接时更新频道.这会在模块之间产生很多相互依赖性,并且很难维护.

我需要的是类似Servlet容器中的HttpSession,这样我就可以从我服务器的所有模块中获取对我的通道和会话资源的引用.

如何在Servlet中实现HttpSession?它是一个存储所有JSESSIONID的全局hashmap,容器从哪个容器确定要返回的属性映射?如果它是一个全局的sysmbol表,它会达到性能(即使hashMap的时间是O(1),可能会有会话修改,所以它可能必须同步)?

PS.也许这个案例的设计模式的一些建议也会做.

Bru*_*der 3

我建议尝试Shiro

Shiro 可以在 servlet 容器之外处理会话管理。

您可能希望使用EhCache支持 Shiro ,以提供适当的缓存,并在需要时提供会话持久性(以及负载平衡等...)