약 10 초마다 주기적으로 좌표를 보내는 GPS 장치가 약 100 대 있습니다. 고객이 실시간 역 지오 코딩을 사용하여 차량을 위치와 함께 표보기로보고 싶습니다. 나는laravel 대기열을 사용하여 즉석에서 Google 지오 코딩
가 웹 소켓
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, ) )));
에게}
실행 a를 사용하여 TCP IP 메시지를 수신 아래처럼 추가 한 지오 코딩 스크립트 전에 DB의 모든 패킷을 저장하는 큐를 설정 한 큐
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을 통해 동시 프로세스 수를 제한 할 수 있다고 생각합니다.그게 당신이 찾고있는 것이 확실하지 않은 경우. – btl
최소한 개선 할 수있는 몇 가지 방법이 있지만 몇 가지 지침을 제공합니다. 1) 대기열에서 작업 대기 중 (대기 중)인지 확인하고 대기중인 작업을 제거 할 수 있습니다. 대기열에 새 작업을 넣을 때 차량 2) 매번 google api에 전화를 걸지 않으실 것입니다. 예를 들어, 좌표가 여전히 동일한 지 확인하는 것을 고려해보십시오. 차량이 움직이지 않았고 이미 위치를 알고 있기 때문입니다. – Leentje
두 번째 생각에; 프론트 엔드가 실제 위치를 표시해야하는 경우에만 Google에 API 호출을 수행합니다. (그리고 그냥 좌표를 저장하십시오) – Leentje