当前位置: 代码迷 >> Java Web开发 >> 请问:怎么实现,若两个用户在某一时刻都打开了一个页面,进行提醒
  详细解决方案

请问:怎么实现,若两个用户在某一时刻都打开了一个页面,进行提醒

热度:6264   发布时间:2013-02-25 21:13:33.0
请教:如何实现,若两个用户在某一时刻都打开了一个页面,进行提醒
现在客户有个需求,同时打开一个页面,需要提醒用户.比如两个用户同时打开一条记录的编辑页面,要同时提醒两个用户.请问下各位,有什么好的思路吗?

------解决方案--------------------------------------------------------
常规来说,只能提醒后打开的人。

可以用一个缓存(比如用Set)来记录当前编辑中的记录,那么每次打开前查一下一个记录,就可以提醒后打开的人。


但是你将面临一个问题:就是如果之前编辑的人,直接把编辑页面给 X 掉,你很难保证捕获到这样的信息从而删除缓存中正在编辑的这个状态。
------解决方案--------------------------------------------------------
Session没意义,Session是不能在多个会话之间共享的。Application还差不多。

数据库可以,不过就会增加点代价,但好处是集群环境有效。

一般来说这个缓存以 private static Set currentEditing; 就行了,注意控制并发。
------解决方案--------------------------------------------------------
用Application这个应该会比较简单
里面放个变量,然后判断一下
最后在页面中把Application拿出来就行了吧
------解决方案--------------------------------------------------------
探讨
-_- 方法也为静态的,这个方法还可以怎么优化》??

------解决方案--------------------------------------------------------
X,为啥 <code> 内的内容全没了。。。算了,懒得重打了。。。

1.applictioncontext变量 好处:简单;缺点:集群失效;
—— 比起static而言没那么简单;
2.缓存(private static Set currentEditing) 好处:简单 ;缺点:集群失效
—— 集群失效确实是最大问题
3.数据库存储 好处:集群可用 ;缺点:性能消耗稍大;
—— 是的

另外还有一招,就是用MemCache之类的外置缓存组件,它们自己能实现集群。


------解决方案--------------------------------------------------------
数据库端加一个记录状态的字段再加一个sequence,拿到之后看状态;修改完成了的放回去sequence+1 每次打开一个修改页面就发送请求如果状态为游人没有放回去的状态提醒后面的再发送给前一个知道;保存时看sequence小于数据库中的时候提醒有别人修改过了,是否强制替换
------解决方案--------------------------------------------------------
楼上的方法可行 在数据库表中加个字段记录状态。
  相关解决方案