我遇到的问题是我的软件会在会话中存储关键数据。
由于我使用ajax并且用户只需在几个选项卡中打开软件,就会有并行请求。 不幸的是,一次将其限制为一个请求是不可能的。
我最初尝试解决此问题的方法是在application_controller中使用after_filter来调用一个方法来检测其他工作人员所做的更改,并在保存之前将它们合并到自己的会话对象中。
不幸的是,这确实缓解了我的问题,但没有彻底解决。 在我看来,在我的after_filter和实际保存我的会话的中间件之间,即ActionDispatch :: Session :: RedisStore,仍然存在足够大的差距,让另一个工作者编写自己的会话。
我想不出任何其他解决这个差距的解决方案,但是这个:
在我这样做之前,我想征求意见和建议,或者理想情况下,更好的解决方案。如果不先征求意见,那么弄乱中间件对我来说似乎太危险了。
答案 0 :(得分:0)
由于您说会话中的数据很关键,我认为最好同步来自每个用户的请求,同时保持不同用户之间的并发。
例如,您可以启动多个rails进程,每个进程都监听自己的端口,并在这些进程之上提供负载均衡器(例如Nginx)。 具有会话粘性功能的负载均衡器是完美的,但IP哈希也是可以接受的。