Php Arduino和Web服务器之间的连接监视
我想做什么: 监视Arduino和Apache web服务器之间的连接,并在web浏览器上显示上次联机时间的“联机”或“脱机” 我是如何做到的: 我的Arduino正在使用HTTP POST将心跳发送到heartbeat.php。在heartbeat.php的开头,我设置了一个会话变量,并将当前时间戳存储到MySQL数据库,然后重定向到index.php heartbeat.phpPhp 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正文
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"]);
}
}
?>