我正在从事医生项目(web android(工作,当患者预订A令牌时,它首先检查医生是否在线;如果是在线患者可以预订。
为此,我使用了ping用户IP方法,即当患者提交令牌时,它会在医生的IP上进行,如果他在线(具有主动互联网连接(,则它会注册患者令牌。但这似乎无法正常工作,因为从ping获得的数据表示100%的数据包丢失。
无法使用在医生最后一个动作上触发的标志设置,这不是实时的。
请建议您是否有解决此问题的解决方案。
<?php
// unset variables first to avoid mixing the results from previous calls
// 0 for success, 1 for packet loss, 2 for other error.
$retval=-1;
$output=array();
exec("ping 127.0.0.1 -c2 -w2 2>&1",$output,$retval);
echo "Return code: ".$retval."<br>n";
echo implode("<br>n",$output);
?>
许多站点忽略ICMP(ping(。如果您的医生让他的机器关闭ICMP过滤,那可能会这样做。
在用户表中插入标志意味着在用户表中添加额外的列。当用户登录时,请打开标志。当用户可以注销该标志时。例如| is_login | 1
或| is_login | 0
那么,您可以从数据库查询并可以检查医生在线或离线。
好吧,所以我如何理解您的问题,您想知道医生目前是否正在使用您的网站/应用程序。因此,这可以通过在数据库中添加一个字段来完成。让我们称此user_activity。现在,当用户登录您可以在此字段中存储时间时,您可以进行查询以查看最近5-10分钟的这个时间(根据您的要求(。现在,完成此操作后,您可以在每60秒内ping用户检查用户是否仍然存在,并且从这里也可以更新数据库字段。因此,您可以检查谁在线,谁不是。
var checkstatus = setInterval(function () {
/* jQuery - back to server*/
$.get("checkstatus.php");
}, 60000);
问题通过JavaScript中的'eventsource'方法解决。
只包括var source = new EventSource("set_online.php");
在每个页面中包括上线。
然后在set_online.php
设置在线状态标志上,该标志将在数据库中更新。
就是这样!只要您在该页面上设置了该页面用户,就表明他已连接到Internet。