Rails 如何避免状态冲突?

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

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

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

共收到 6 条回复

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

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

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

setInterval(callServerOnStock(), 1000);

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

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

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

操作前先检测下状态吧

乐观锁

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

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

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