【发布时间】:2013-07-29 17:09:13
【问题描述】:
高级理念: 我有一个可以通过 http 请求连接到我的网站的微控制器...我想在数据库上记录更改后立即向设备提供响应...
由于终端设备是客户端,即微控制器...我不知道无需设置端口转发即可将数据传递给客户端的方法...这是非常不希望的...问题出现了当尝试将数据从外部网络发送到内部网络时... A. 端口转发或 B 让客户端设备启动请求,这使我想到让设备向轮询更改的文件发送 http 请求
更新:
非常感谢奥利·琼斯。我已经暗示了他的一些 建议在这里。
Jason McCreary 建议修改一个很大的列 改进,因为它应该提高速度和可靠性......很好 建议! :)
如果在此示例中存在过度工作的数据库问题
也许以下将在哪里工作......当数据插入时 数据库将更改写入文件...然后循环
不断检查该文件是否有更新....想法?
我有table1,我想查看自上次检查以来特定行(基于 UID/键)是否已更新,并且如果记录投注更新,则持续检查 60 秒...
我想我可以使用 INFORMATION_SCHEMA 数据库来做到这一点。
此数据库包含有关表、视图、列等的信息。
尝试解决方案:
<?php
$timer = time() + (10);//add 60 seconds
$KEY=$_POST['KEY'];
$done=0;
if(isset($KEY)){
//loign stuff
require_once('Connections/check.php');
$mysqli = mysqli_connect($hostname_check, $username_check, $password_check,$database_check);
if (mysqli_connect_errno($mysqli))
{ echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
//end login
$query = "SELECT data1, data2
FROM station
WHERE client = $KEY
AND noted = 0;";
$update=" UPDATE station
SET noted=1
WHERE client = $KEY
AND noted = 0;";
while($done==0) {
$result = mysqli_query($mysqli, $query);
$update = mysqli_query($mysqli, $update);
$row_cnt = mysqli_num_rows($result);
if ($row_cnt > 0) {
$row = mysqli_fetch_array($result);
echo 'data1:'.$row['data1'].'/';
echo 'data2:'.$row['data2'].'/';
print $row[0];
$done=1;
}
else {
$current = time();
if($timer > $current){ $done=0; sleep(1); } //so if I haven't had a result update i want to loop back an check again for 60seconds
else { $done=1; echo 'done:nochange';}//60seconds pass end loop
}}
mysqli_close($mysqli);
echo 'time:'.time();
}
else {echo 'error:nokey';}
?>
这是提高速度和提高可靠性的适当方法和建议吗
【问题讨论】:
-
为什么不在表中添加一个 modified 列并检查它?
-
“持续检查”是什么意思? “看一次,然后通过重复检查不断锤击数据库”?
-
@MarcB 是的。这就是我的意思……睡眠(2);我猜不会受伤
-
@JasonMcCreary 老实说,我不认为这是一种检查是否发生更改的方法,然后在我发布更改后重置修改后的列....嗯,我喜欢它我仍然对如何持续检查数据库感兴趣
-
你的高层次目标是什么,你可能搞错了。