我大约有100个GPS设备,每隔10秒就会定期发送坐标。我的客户希望进行实时反向地理编码,以便在表格视图中查看车辆及其位置。我设置了一个队列,在将所有数据包保存到数据库之前,我添加了以下地理编码脚本:
使用Websocket接收TCP IP消息
public function onMessage(ConnectionInterface $conn, $msg) {
//get the message
// send the dispatch job to save it in db
$this->dispatch(new SavePacketsToDb($key_1, json_encode(
array(
'company_id' => $key_1,
'vehicle_id' => $company->vehicle_id,
'tracker_id' => $company->tracker_id,
'lat' => $lat,
'lng' => $lng,
'imei' => $imei,
'datetime' => $datetime,
)
)));
运行队列
public function handle(){
$lat=$obj->lat;
$lng=$obj->lng;
$url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" . $lat . "," . $lng . "&key=mykey";
$json = file_get_contents($url);
$data = json_decode($json);
$status = $data->status;
$address = '';
if ($status == "OK") {
// echo "from geocode address";
echo $address = $data->results[0]->formatted_address;
}
else{
$address=NULL;
}
//save to db
}
如果我将此地理编码加入队列,是否可以支持1000个并发设备,我有点担心,是否有更好的方法?
numprocs=8
来限制并发进程的数量。不过我不完全确定这是否符合你的要求。 - user320487