代码之家  ›  专栏  ›  技术社区  ›  Felipe T.

我可以在Java HttpSession中存储整个图形吗?

  •  0
  • Felipe T.  · 技术社区  · 11 年前

    我正在开发一个web应用程序,它基本上允许用户在浏览器中创建一个图形(在服务器中,图形基本上是一个节点列表,每个节点都有一个边列表)。用户创建或删除的每个节点或边缘都通过Ajax传递给服务器,因此服务器可以构建一个由Java对象表示的等价图。 此应用程序是桌面应用程序的web版本。所以我想向用户提供“保存”图形的选项。我最初的想法是当用户单击保存按钮时将对象保存在数据库中,但为此,我需要将图形保存在用户的会话中。

    那么我可以在http会话中存储一个图(它是节点和边的集合)吗?或者有更好的方法来实现我想要的?

    Obs:我正在考虑直接在数据库中操纵图形,也就是说,图形总是持久化的,如果用户会话过期,我会删除数据库中尚未保存的图形。

    1 回复  |  直到 11 年前
        1
  •  1
  •   Igor Katkov    11 年前

    答案取决于应用程序的规模。

    如果只有一台服务器具有足够的内存来保存所有并发用户的会话

    在会话中存储信息是最简单的事情。请确保您的图形是可序列化的,Servlet(或J2EE)容器将接管其余部分。如果您为数据实现一些自定义算法,您可以帮助实现httpsession持久化。

    如果你长大了

    也就是说,如果您有多个服务器前面有负载平衡器,或者您的图形不适合内存。将它们存储在一些共享存储中—数据库或文件服务器,并通过查找密钥进行检索。 考虑使用粘性会话来最小化DB/文件查找并将最近的图形缓存在内存中

    花式把戏

    若您找到了一种将整个图形压缩为1-2KB的方法,将其完全放入http cookie中,浏览器将在每次请求时将其发送给您,您的服务器将是无状态的,无DB,无会话关联性问题。