我正在编辑一个开源Web服务器来托管来自Android应用Torque的数据。扭矩连接到汽车中的ODBII适配器,记录数据,然后以所需间隔(在这种情况下,每秒1次)以获取请求的形式将其上传到服务器。
当我开始将所有内容存储在1个mysql表中时,代码库,然后使用一些mysql distinct语句来提取“会话”信息(这只是在记录数据的每一行上重复)。我的fork打算创建第二个“会话”表,它存储不同的信息,只留下大表中的瞬时信息。
来自应用程序的每个get请求似乎都在等待“Ok!”从html界面返回。
我发现的是,我的逻辑和多个查询需要更长的时间才能返回,最终结果是数据点未被记录。昨天(在我提交之前)我的通勤记录了~1900个数据点;今天(在我提交之后)它只记录了52.在我的apache访问日志中,我看到 52次访问尝试。数千次尝试。
我没有能力编辑/修改应用程序,所以我一直试图从服务器端重新调整它。我只是在PHP编码中。我可以使用哪些技术来加速返回代码,或者我可以从服务器端做什么来立即生成返回代码以允许记录另一个数据点?是否像在代码中移动echo语句一样简单?我缺少最佳实践吗?
我将尝试移动响应代码并可能触发输出缓冲区刷新。另外,我要将记录间隔减少到5秒。希望这些事情会有所帮助。
不幸的是,整个代码片都是可疑的;我将添加我添加的声明(因此认为是麻烦),但我不认为它仅限于此:
if ((sizeof($sesskeys) === sizeof($sessvalues)) && sizeof($sesskeys) > 0) {
// See if there is already an entry in the sessions table for this session
$sessionqry = mysql_query("SELECT session, sessionsize FROM $db_sessions_table WHERE session LIKE '$sessuploadid'", $con) or die(mysql_error());
if (mysql_num_rows($sessionqry) > 0) {
// If there's an entry in the session table for this session, update the session end time and the datapoint count
while($row = mysql_fetch_assoc($sessionqry)) {
$sesssizecount = $row["sessionsize"] + 1;
$sessionqrystring = "UPDATE $db_sessions_table SET timeend='$sesstime', sessionsize='$sesssizecount' WHERE session LIKE '$sessuploadid'";
mysql_query($sessionqrystring, $con) or die(mysql_error());
}
} else {
// If this is a new session, insert an entry in the sessions table and then update the start time and datapoint count
$sql = "INSERT INTO $db_sessions_table (".implode(",", $sesskeys).") VALUES (".implode(",", $sessvalues).")";
mysql_query($sql, $con) or die(mysql_error());
$sql = "UPDATE $db_sessions_table SET timestart='$sesstime', sessionsize='1' WHERE session LIKE '$sessuploadid'";
mysql_query($sql, $con) or die(mysql_error());
}
}
在我提交之前: https://github.com/econpy/torque/blob/master/web/upload_data.php
我的提交后: https://github.com/surfrock66/torque/blob/master/web/upload_data.php
服务器:Ubuntu Server 15.10。 Apache 2.4.12。 Php 2.6.0通过mod php。 MySQL 5.6.28。