我正在尝试为所有连接的用户刷新一个指定的页面,其中一个单击按钮,这可能吗?我正在用html,js和php开发。
您需要other个用户知道其中一个何时单击按钮。
正如@balzacLeGeek所观察到的,这是Web套接字的工作。但是您也可以在AJAX中执行此操作,或多或少使用这样的暂停的AJAX调用:
var refresher = function() {
$.post('check-status.php').then(reply => {
if (reply.pressed) {
// do_reload();
} else {
// display some small animation to let user know we checked
}
// Schedule another round.
window.setTimeout(refresher, 10);
});
};
检查状态功能会被连续调用,这将导致系统上的负载无法接受。但是由于服务器返回[
<?php
$pressed = false;
for ($sec = 0; $sec < 60; $sec++) {
// ... check whether anyone pressed the button ...
if (file_exists('pressed.txt')) {
// return immediately.
$pressed = true;
break;
}
sleep(1);
}
header("Content-Type: application/json;charset=UTF-8");
die(json_encode([ 'status' => 'success', 'pressed' => $pressed ]);
通话被已挂起长达60秒或直到有人按下按钮;在这种情况下,在一秒钟之内,所有挂起的呼叫都会返回,并且所有用户的屏幕都会重新加载;然后他们立即发出另一个呼叫,等待下一次按下,依此类推。
[您可能想利用暂停时间,或实施setInterval看门狗,以确保正确发出更新程序调用(如果一个调用失败,则该客户端的整个周期停止;该客户端处于“死状态”。因此,刷新之后您设置了一个全局时间戳记变量,并且setInterval看门狗函数验证该时间戳记不超过暂停时间再加上合理的余量,例如2秒,如果是,则看门狗仅调用refresher()重新启动周期,甚至显示简短的动画“您的Internet连接有问题”)。被按下的功能只是根据按钮的按下来创建一个文本文件。或者,您可以使用数据库,共享内存区域,Redis或其他任何东西。