【发布时间】:2016-04-10 09:37:45
【问题描述】:
我有一个项目需要通过它发送 GPS 坐标。每 6 秒插入一次。坐标存储在 MYsql 数据库中。我每 6 秒运行一次查询,如果最后一个位置与当前位置不同,应用程序会将数据发送到远程服务器。在浏览器中它就像一个魅力,但在终端我不能使用会话。
我试过 apc_add 但根据 PHP 手册,它很久以前就被删除了。
进行此类比较的最常见方法是什么?将最后的坐标存储到数据库或文本文件中?或者有没有办法在运行时将它存储起来?
**这是我的主要代码:**
<?php
require 'bootstrap.php';
use App\Libs\appServiceProvider;
use App\Libs\socketServiceProvider;
use Socket\Raw\Factory;
use App\Models\Koordinata;
$app = new appServiceProvider;
if (empty($_SESSION['lat']) || empty($_SESSION['lon'])) {
$_SESSION['lat'] = 0;
$_SESSION['lon'] = 0;
}
$lastLat = $_SESSION['lat'];
$lastLon = $_SESSION['lon'];
$currentLat = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lat;
$currentLon = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lon;
if ($lastLat != $currentLat && $lastLon != $currentLon) {
$factory = new Factory();
$socket = $factory->createClient('REMOTEADDRESSE');
echo "Kapcsolat létrehozva\n";
$socket->write("MESSAGE");
echo "Üzenet elküldve\n";
var_dump("Válasz: " . $socket->read(8192));
$socket->close();
} else {
echo "Idle";
$log->addDebug("GPS data NOT CHANGED! STATUS IDLE!");
}
$_SESSION['lat'] = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lat;
$_SESSION['lon'] = $app->getAllCoordinatesByFszgId($application['fszgId'])->last()->lon;
?>
【问题讨论】:
-
在终端中运行时,您可以简单地在无限循环中运行脚本,也许使用 sleep() 来避免主动等待。 `while(true) { 睡眠(1); ... }
标签: php mysql sockets session caching