Rails 如何避免状态冲突?

jiang_plus · 2014年02月14日 · 最后由 ruohanc 回复于 2014年02月15日 · 2395 次阅读

最近的工作是一个库存管理系统,后端为 rails,前端为 angular web app,但是遇到问题就是两个管理员可能同时在操作同一个商品,一头在操作时,另一头可能已经卖掉了。如何在不把这个界面全面变成一个实时的 web app 的前提下,尽可能的实现状态的通知或者减少操作冲突?

后端虽然能够保证一个商品不会真正被卖掉两次,但操作起来冲突情况太多体验也很差。

做成真正实时不仅需要较多工作量,而且在这个案例可能也没有必要。

我觉得 Long polling by Javascript 应该是比较合适的方案。

Long polling 很简单,就是用 setInterval 来不断地请求服务器。

setInterval(callServerOnStock(), 1000);

后台有更新就回一个信息,比如某商品已经被卖掉。然后前端根据这个信息把那个商品描黑。虽然不能 100% 避免冲突,但应该足够了,而且后台还是有另一层保护的。

你可以只在这个页面或 View 中设置 long polling。

Long polling 的最大弊端就是服务器负荷大,因为请求多。但在你的情况中应该完全不成问题,毕竟管理系统只有很少人在同时使用的,而且只在特定的页面。

操作前先检测下状态吧

#1 楼 @billy 这个确实可以接受,管理员数量不会太多

听起来就是状态机能解决的问题。只要规定状态转移的条件就行了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号