自动检测数据库表是否更改
Auto detect if DB table changes
我有一个小应用程序,用户可以在其中将任务拖放到HTML表中。
当用户删除任务时,我调用一个名为 update_task
的 javascript 函数:
function update_task(user_id, task_id, status_id, text, uiDraggable, el) {
$.get('task_update.php?user_id='+user_id+'&task_id='+task_id+'&status_id='+status_id+'', function(data) {
try {
jsonResult = JSON.parse(data);
} catch (e) {
alert(data);
return;
};
在task_update.php,我得到了我的价值观; user_id
,task_id
和status_id
并执行PDO更新查询,以更新我的数据库。如果查询正确执行,我
echo json_encode ( array (
'success' => true
) );
然后我将任务附加到正确的表格单元格
if(typeof jsonResult.success != 'undefined') {
$(uiDraggable).detach().css({top: 0,left: 0}).appendTo(el);
}
这一切都工作正常。但是,我开始意识到,当两个或更多人同时进行更改时,这是一个问题。如果我使用 2 个浏览器进行测试,并在两个浏览器上打开了站点,例如: 然后,如果我在浏览器 1 上移动任务,我将不得不在浏览器 2 上手动刷新页面才能看到更改。
所以我的问题是;如果对数据库表进行了更改,如何使应用程序自动降级?以及如何在不刷新页面的情况下更新 HTML 表。
我已经查看了一些更新页面的时间间隔,但这对我不起作用,因为我真的不想强制浏览器刷新。例如,用户还可以在灯箱iframe中创建新任务,因此,如果他们的浏览器在尝试创建新任务时刷新,这对他们来说将非常烦人。
那么,是的,我使用的最佳实践是什么?
使用 Redis 及其发布/订阅功能在您的 PHP 应用程序和轻量级 websocket 服务器(Node.js 之间实现消息总线是一个不错的选择)。
当你的 PHP 修改数据时,它还会在 Redis 中发出一个事件,指出某些数据已更改。
当 websocket 客户端连接到 Node.js 服务器时,它会告诉服务器它要监视哪些数据,然后,一旦收到 Redis 事件并且事件的数据与客户端的监视数据匹配,就会通过 websocket 通知客户端,然后客户端将刷新页面。
看看这个问题,其中的答案详细解释了所有这些,包括可以重用的示例代码。
我会使用 ajax 以合理的间隔检查服务器。什么是合理的取决于你的项目 - 它应该足够频繁,它在一端进行更改,不要搞砸另一个用户正在做的事情。
如果您担心这是资源密集型的,您可以使用APC为所有活动内容保存上次修改时间 - 这样,当您只是检查是否有任何更改时,您就不必访问数据库。
当事情发生变化时,你也应该使用ajax,并使用javascript/jquery直接在页面中添加更改。
如果您确实需要检查数据库更改 - 编写数据库触发器。
但是,如果除了您的代码之外,没有人更改它 - 您可以在代码中实现一些观察。
- 进行观察(事件侦听器)模式实施,或使用现有的模式之一。
- 当发生任何有意义的事情时触发事件。
- 订阅此活动
- 是否可以使用NativeScript使用Sqlite数据库
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- 使用jquery验证插件检查数据库中是否存在电子邮件
- 是否可能复选框获胜't检查数据库中的行中是否有值
- 是否有与javascript兼容的本地数据库
- 如果外部应用程序更改了持久模型(服务器数据库),AngularJS 是否可以自动更新视图
- 验证数据是否已在数据库中,具有更多输入相同的类
- 如何使用phonegap检查电话号码是否存在于联系人数据库中
- 检查数据库中是否存在用户的电子邮件
- 是否可以使用 node.js 作为 greasemonkey 的更快、更优雅、支持数据库的替代方案
- 使用电话间隙检查数据库是否存在
- 检查 mongo 数据库中是否存在后期输入
- ASP.NET 检查数据库中是否存在电子邮件的最佳方法
- 检查 JavaScript 中是否存在数据库
- 是否可以仅使用javascript检索数据库详细信息
- 对数据库进行 AJAX 编辑时,我是否应该立即使用新数据更新接口
- Android 4.0.3 Web 浏览器是否支持 Web SQL 数据库?
- 检查数据库中是否存在电子邮件文本框值
- 如何检查 ydn.db 数据库是否已准备好使用
- 使用 jQuery 检查数据库行是否存在