如何使用ping方法检测用户是否在线(活动Internet连接)

时间:2017-06-02 10:19:15

标签: php ping

我正在开展一个医生 - 患者项目(Web + Android),当患者预订令牌时,它首先检查医生是否在线;如果是在线病人可以预订。

为此目的,我使用ping用户IP方法,即当患者提交令牌时,它在医生的IP上ping,如果他在线(具有有效的互联网连接),则它会注册患者令牌。但这似乎不起作用,因为来自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);

?>

4 个答案:

答案 0 :(得分:0)

许多网站忽略ICMP(ping)。如果您让医生让他的机器关闭ICMP过滤,那可能会这样做。

答案 1 :(得分:0)

在用户表中插入标记意味着在用户表中添加额外的列。当用户登录时打开一个标志。当用户可以注销该标志时例如 | is_login |   1

或 | is_login |    0

然后,您可以轻松地从数据库查询,并可以检查医生是在线还是离线。

答案 2 :(得分:0)

好的,所以我如何理解你的问题,你想知道检查医生是否正在使用你的网站/应用程序。因此,可以通过向数据库添加一个字段来完成此操作。我们称之为User_activity。现在,当用户登录时,您可以将时间存储在此字段中,然后您可以查询以查看在过去5-10分钟内所有人都有此时间(根据您的要求)。现在,一旦完成此操作,您可以每隔60秒ping一次用户以检查用户是否仍然在那里,从这里您也可以更新数据库字段。因此,通过这种方式,您可以查看谁在线以及谁不在线。

var checkstatus = setInterval(function () {
    /* jQuery - back to server*/
    $.get("checkstatus.php");
 }, 60000);

答案 3 :(得分:0)

问题通过&#39; EventSource&#39;解决。 JavaScript中的方法。

只需加入var source = new EventSource("set_online.php");

即可

在每个页面中包含以上行。

然后在set_online.php设置在线状态标志,该标志将在数据库中更新。

那就是它!只要您在该页面上,用户就会在线设置,从而表示他已连接到互联网。