我正在开发类似于pastebin的东西(是的,它很通用),但允许多个用户进行编辑。显而易见的问题是多个用户试图编辑同一文件。我考虑锁定文件,当一个用户在编辑时(这不是最好的解决方案,但我不需要太复杂的东西),但为了防止/警告用户,我显然需要一个监视每个用户编辑会话的系统。使用数据库和ajax,我考虑了两个解决方案。
第一个解决方案是使编辑页面在任意时间间隔(例如一分钟)向服务器发送ping请求,并更新数据库中的编辑会话条目。然后,在下一次脚本请求编辑时,它会检查最近的ping,如果最近的ping是另一个任意时间之前(例如五分钟),那么我们假设上一个用户已经退出并且文件可以再次编辑。当然,这种方法的问题在于假设上一个用户已经退出只是一种假设。他可能有不稳定的Wi-Fi连接,窗口仍然打开,而实际上只是掉线了十分钟。
当然,要解决这个问题,我们必须让服务器对来自先前关闭会话的新请求进行响应,并返回错误,告诉客户端指出用户的会话已结束,然后通过将其保存为服务器上的另一个文件并要求用户手动合并等方式来处理它。毫无疑问,这对最终用户来说非常糟糕。
所以我想到了另一个解决方案。也许可以在用户会话结束时触发unload事件,但我不能确定这是否可靠。
有没有其他更优雅的解决方案?
第一个解决方案是使编辑页面在任意时间间隔(例如一分钟)向服务器发送ping请求,并更新数据库中的编辑会话条目。然后,在下一次脚本请求编辑时,它会检查最近的ping,如果最近的ping是另一个任意时间之前(例如五分钟),那么我们假设上一个用户已经退出并且文件可以再次编辑。当然,这种方法的问题在于假设上一个用户已经退出只是一种假设。他可能有不稳定的Wi-Fi连接,窗口仍然打开,而实际上只是掉线了十分钟。
当然,要解决这个问题,我们必须让服务器对来自先前关闭会话的新请求进行响应,并返回错误,告诉客户端指出用户的会话已结束,然后通过将其保存为服务器上的另一个文件并要求用户手动合并等方式来处理它。毫无疑问,这对最终用户来说非常糟糕。
所以我想到了另一个解决方案。也许可以在用户会话结束时触发unload事件,但我不能确定这是否可靠。
有没有其他更优雅的解决方案?