我们有一个后端应用程序来管理来自客户的消息。我们有4名客户服务主管,我们希望防止两个不同成员无法打开相同消息的情况,所以我们想做以下事情......
假设user1打开了消息ID 15,之后user2打开了相同的消息,因此我们想要发出“此消息已由user1打开”的警告。我们怎么做?
答案 0 :(得分:2)
在数据库中创建不同的表。 当用户打开邮件时,请更新表以显示已打开的邮件以及由哪个用户打开。
当另一个用户尝试打开它时,请交叉检查该表以查看该消息是否有一行。然后,您可以执行相应的操作,例如打开或警告用户。
您可以在给定的超时期限后删除行以允许其他人打开。
架构例如
User_id msg_id time_opened
不幸的是,由于sesssion是特定于用户的,因此您无法使用会话。但是,您可以使用平面文件。
要删除行,请使用
等方法$timeout_time_in_seconds = 30; $time = time() - $timeout_time_in_seconds; $Query= "delete from table where time_opened
请注意,根据时间字段(可以是int,datetime或timestring),可能需要格式化$ time变量的日期。但是,由于易于比较和减法以及没有格式化,int将是最方便的。
我很移动,所以请原谅任何错误。这就是为什么我没有评论但必须编辑。 Js问题。
当第一个用户点击时,会发生快速检查和更新数据库。 当第二个用户尝试时,脚本将通过检查数据库来检测第一个用户已经打开。
如果流量负载较低且尝试访问的用户数量不是太多,您可以依赖它。并且还指望读取和插入查询在短时间内发生,因为您可以猜测比两个用户同时点击更快。除非你有其他问题,否则这应该有效
答案 1 :(得分:1)
最简单的方法是在数据库级别实现悲观锁定 http://www.blackwasp.co.uk/PessimisticLocking.aspx 无论您使用何种语言,都应该检查数据库,看看行是否被锁定,并在屏幕上发送消息。
您还可以使用长轮询设置应用程序,以便在请求资源可用时通知用户。 http://en.wikipedia.org/wiki/Push_technology