我在Heroku中部署了一个Java Web应用程序。
现在,我想更改后端,以便它可以通知连接的用户有关特定事件的信息。我以为我可以使用服务器发送的事件来做到这一点,我认为它的工作方式如下:
EventOutput
)并将其与用户的ID一起存储在某处(让我们说一下记忆中的Map
。当只有一台机器处理请求时,这很好用。
当我想扩展我的应用并引入更多机器时,我的问题就出现了。然后,我不能再将这些连接存储在一台机器的内存中,我需要使用一些集中位置。但是集中位置需要序列化/反序列化连接,这意味着它不再是相同的连接了!
你通常如何做这样的事情?
答案 0 :(得分:0)
一种解决方案是使用会话亲和力(例如粘性会话),这将确保单个会话的请求始终是"总是"路由到同一个过程(我说"总是"因为有一些警告)。您可以通过运行以下命令启用此功能:
$ heroku labs:enable http-session-affinity
通过这种方式,您可以将内容保留在内存中,而不必序列化会话。
以下是一篇更详细地介绍此功能的文章:https://blog.heroku.com/archives/2015/4/28/introducing_session_affinity