我感觉你这在把简单的问题复杂化,
如果有两个人先后编辑同一文章,管它们客户端的状态呢,谁先提交的算谁编辑的。
当然,照顾到后提交者的情绪,可以这样做:
每篇文章记录编辑次数count,网页提交Form中放一个隐藏的input标签,记录用户刷新时的count,提交成功后服务器里count+1。
这样,当有多人提交的时候,你就知道他编辑的是否为最新版本,如不是,则提交驳回,并提示人家有最新编辑的版本。同时还可以缓存下人家要提交的东西,避免丢失。
诺 有个方法 只不过耗点资源
在页面上做一个js timer 之后每隔2min 向服务器给个ajax
之后服务器端接收,刷application 或者cache 的过期时间 ,这个是我原来写的个
function CheckUserOnline() { //不断发AJAX请求
$.ajax({
type: "GET",
url: "./Common/GotUserOnline.ashx?timestamp=" + Math.random(),
datatype: "html",
success: function (msg) {
}
});
setTimeout("CheckUserOnline()", 60000);
}
$(function () {
CheckUserOnline();
});
public class GotUserOnline : IHttpHandler,IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
try
{
var userCode = context.Session["usercode"].ToString();
OnLineUserHelper.ReceiveOnlineUser(userCode, deptname, context.Request.UserHostAddress);
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}
catch { }
}
public bool IsReusable
{
get
{
return false;
}
}
}
private static List<OnlineUser> list;
public static List<OnlineUser> List
{
get
{
if (CacheManager.GetInstance().ExistCache("onlineUser") == false)
{
CacheManager.GetInstance().AddCache("onlineUser", new List<OnlineUser>(), 24 * 60);
}
list = CacheManager.GetInstance().GetCache<List<OnlineUser>>("onlineUser");
return list;
}
}
public static void ReceiveOnlineUser(string UserCode, string deptname, string UserIP)
{
if (List.Exists(p => p.UserCode == UserCode))
{
List.Find(p => p.UserCode == UserCode).RefreshTime();
}
else
{
List.Add(new OnlineUser
{
UserCode = UserCode,
deptname = deptname,
FirstSendTime = DateTime.Now,
LastSendTime = DateTime.Now,
UserIP = UserIP,
});
}
}
public static bool UserOnline(string UserCode)
{
return List.Exists(p => p.UserCode == UserCode);
}
}
public class OnlineUser
{
public string UserCode { get; set; }
public DateTime FirstSendTime { get; set; }
public DateTime LastSendTime { get; set; }
private Timer time { get; set; }
public string UserIP { get; set; }
public string deptname { get; set; }
public string OnLineTime { get; set; }
public OnlineUser()
{
time = new Timer();
time.Interval = 120 * 1000;
time.Elapsed += new ElapsedEventHandler(time_Elapsed);
this.time.Start();
}
public void RefreshTime()
{
this.LastSendTime = DateTime.Now;
this.time.Interval = 120 * 1000;
this.time.Start();
}
void time_Elapsed(object sender, ElapsedEventArgs e)
{
OnLineUserHelper.List.Remove(this);
}
}
这是一个并发处理的问题,建议采用乐观锁的方式。
你好,你这里对这个文章加一个状态和当前编辑者
state=1表示非编辑用户不可编辑
state=0表示任意用户可编辑
每次某个用户XXX编辑的时候为这篇文章修改状态state=1,且当前编辑用户为XXX
修改完成之后设置state=0,切将当前编辑用户设置为空。
如果遇到断电的情况下,那么用户XXX重新登录到系统中,这个state=1且当前编辑用户为XXX的文章对于用户XXX为可编辑,其他用户不可编辑。