Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Arduino和Web服务器之间的连接监视_Php_Mysql_Http_Post_Arduino - Fatal编程技术网

Php Arduino和Web服务器之间的连接监视

Php Arduino和Web服务器之间的连接监视,php,mysql,http,post,arduino,Php,Mysql,Http,Post,Arduino,我想做什么: 监视Arduino和Apache web服务器之间的连接,并在web浏览器上显示上次联机时间的“联机”或“脱机” 我是如何做到的: 我的Arduino正在使用HTTP POST将心跳发送到heartbeat.php。在heartbeat.php的开头,我设置了一个会话变量,并将当前时间戳存储到MySQL数据库,然后重定向到index.php heartbeat.php index.php中的javascript将执行自动刷新,并将healthcheck.php加载到HTML正文

我想做什么:

监视Arduino和Apache web服务器之间的连接,并在web浏览器上显示上次联机时间的“联机”或“脱机”

我是如何做到的:

我的Arduino正在使用HTTP POST将心跳发送到heartbeat.php。在heartbeat.php的开头,我设置了一个会话变量,并将当前时间戳存储到MySQL数据库,然后重定向到index.php

heartbeat.php


index.php中的javascript将执行自动刷新,并将healthcheck.php加载到HTML正文内容中

<script>
    $(document).ready(function() {
        var refreshId = setInterval(function() {
            $("#content").load("healthcheck.php");
        }, 1000);
        $.ajaxSetup({ cache: false });
    });
</script>

$(文档).ready(函数(){
var refreshId=setInterval(函数(){
$(“#content”).load(“healthcheck.php”);
}, 1000);
$.ajaxSetup({cache:false});
});
在healthcheck.php中,脚本将检查会话变量以确定系统是否在线。如果系统处于脱机状态,它将查询最后一次联机时间并显示在浏览器上

healthcheck.php


问题:

当我使用电脑的浏览器浏览localhost/heartbeat.php时,我可以在最后一次在线时间显示变为“离线”之前看到“在线”,这就是我想通过使用Arduino实现的

但是,当我使用Arduino测试脚本时,它总是显示“脱机”,并且最后一次联机时间会根据我的刷新间隔进行更新

我想这是因为会话变量设置在arduino本身中,所以我的电脑浏览器没有获得它,因此总是显示“脱机”,如果我错了,请纠正我


我正在寻找建议和建议,以实现这一在线监测功能的有效方式,任何建议都是欢迎和赞赏的

> P>我不确定你认为什么是你的“会话ID”,但我认为你使用它更像是一个API密钥来识别你的设备走向Web服务。会话ID通常是放入
HTTP
请求中cookie中的令牌,管理和跟踪起来很麻烦,您的用例不需要它们。只需
POST
标记,并通过
$\u POST
变量获取它

正如我在一篇评论中所建议的那样,为什么不制作一个程序,向Arduino发送
ICMP
/
Ping
,当它没有应答时,将其标识为“离线”


<> P>这将减少麻烦,避免你在ARDUIO中添加另一个责任。

< P>我不确定你认为什么是你的“会话ID”,但我认为你更像是一个API密钥来识别你的设备走向Web服务。会话ID通常是放入
HTTP
请求中cookie中的令牌,管理和跟踪起来很麻烦,您的用例不需要它们。只需
POST
标记,并通过
$\u POST
变量获取它

正如我在一篇评论中所建议的那样,为什么不制作一个程序,向Arduino发送
ICMP
/
Ping
,当它没有应答时,将其标识为“离线”


这将减少麻烦,并避免您在Arduino中增加另一项责任。

如果我错了,请纠正我,但我认为会话变量用于存储每个客户端的数据,因此,您在从arduino到服务器的会话中设置的会话变量与从pc webbrowser到服务器的会话中设置的会话变量不同。那么,为什么不制作一个程序,将ICMP/Ping发送到arduino主机,当它没有应答时,将其标识为“脱机”?这将减少麻烦,并避免您在Arduino中增加另一项责任。@til_b是的,您是对的。我之前错误地理解了会话变量的概念,因此我陷入了困境并迷失了方向。如果我错了,请纠正我的错误,但我认为会话变量用于存储每个客户端的数据,因此您在从arduino到服务器的会话中设置的会话变量与从pc webbrowser到服务器的会话中设置的会话变量不同。嗯,为什么不制作一个程序,将ICMP/Ping发送到arduino主机,当它不应答时,将其标识为“脱机”?这将减少麻烦,并避免您在Arduino中增加另一项责任。@til_b是的,您是对的。我之前错误地理解了会话变量的概念,因此我陷入了困境并迷失了方向。Ping arduino将是一个解决方案,但我担心的是我的服务器正在监听另一个随时可能发生的信号,因此它必须一直处于待机状态。当我的服务器正在ping arduino时,当信号进入时,流量/连接是否会受到影响,此外,我不仅要监控1个arduino我真的不理解你的评论,对不起。。。看起来你谷歌翻译了两次?!不,我没有用谷歌翻译。简而言之,我的服务器将连接到多个arduino客户端。它们中的每一个都可能随时发送触发信号,因此我怀疑如果我要求服务器ping每个arduino客户端,网络流量将受到影响。你明白吗?我是在挖苦你,但我还是不明白你在说什么。。。你说“我担心的是我的服务器正在监听另一个信号”,你到底在说什么?什么“必须随时待命”?您所说的“当我的服务器正在ping arduino时,信号进入时,流量/连接会受到影响”是什么意思?我错过了重要的线索,而你说的方式。。。奇怪:-)好吧,你不需要每秒钟ping一次,你只需要使用一个PHP软件包,它可以让你发送/接收一条ping消息,并且每分钟左右执行一次,如果主机没有响应,发送5次ping,如果全部失败,则将其标记为离线,arduino将是一个解决方案,但我担心的是,我的服务器正在监听另一个随时可能发生的信号,因此它必须始终处于待机状态。当信号为com时,交通/连接是否会受到影响
<script>
    $(document).ready(function() {
        var refreshId = setInterval(function() {
            $("#content").load("healthcheck.php");
        }, 1000);
        $.ajaxSetup({ cache: false });
    });
</script>
<?php
session_start();
include("connect.php");

if(isset($_SESSION['hb']))
{
    echo '<h1>System Online!!!</h1>';
    unset($_SESSION['hb']);
}
else
{
    echo '<h1>System Offline!!!</h1>';
    $link=connection();
    $result=mysql_query("SELECT * FROM heartbeat", $link);

    while($row=mysql_fetch_array($result))
    {
        printf("Last Online: %s", $row["time"]);
    }       
}
?>