HTTP-клиент / file_get_contents () сокращает время ожидания приложения Laravel из-за времени загрузки - PullRequest
1 голос
/ 24 мая 2019

В настоящее время я использую Guzzle для извлечения данных из ресурса, и это внутри приложения Laravel.Функция для извлечения API находится в функции контроллера.Всякий раз, когда я загружаю страницу (в данном случае страницу lead_tracker, объявленную в контроллере ниже), запрашивающую API с помощью Guzzle, сервер просто отключается и ничего мне не дает.Почему это так?

Вот соответствующие файлы: контроллер (web.php)

 <?php

  Route::get('/facebook_for_business', 'PageController@facebook_for_business_page')->middleware('usersession');
  Route::get('/search_dominance', 'PageController@search_dominance_page')->middleware('usersession');
  Route::get('/phone_management', 'PageController@phone_management_page')->middleware('usersession');
  Route::get('/email_management', 'PageController@email_management_page')->middleware('usersession');
  Route::get('/document_center', 'PageController@document_center_page')->middleware('usersession');
  Route::get('/google_adwords', 'PageController@google_adwords_page')->middleware('usersession');
  Route::get('/media_gallery', 'PageController@media_gallery_page')->middleware('usersession');
  Route::get('/lead_tracker', 'PageController@lead_tracker_page')->middleware('usersession');
  Route::get('/push_network', 'PageController@push_network_page')->middleware('usersession');
  Route::get('/sub_account', 'PageController@sub_account_page')->middleware('usersession');
  Route::get('/dashboard', 'PageController@dashboard_page')->middleware('usersession');
  // Route::get('/dashboard', 'PageController@dashboard_page');
  Route::get('/calendar', 'PageController@calendar_page')->middleware('usersession');
  Route::get('/register', 'PageController@register_page');//->middleware('usersession');
  // Route::get('/register', 'PageController@register_page');
  Route::get('/reviews', 'PageController@review_page')->middleware('usersession');
  Route::get('/notes', 'PageController@notes_page')->middleware('usersession');
  Route::get('/events', 'PageController@events_page')->middleware('usersession');

  Route::get('/privelege', 'PageController@privelege_page')->middleware('usersession');
  Route::get('/login', 'PageController@login_page');
  // Route::get('/login', 'PageController@login_page')->middleware('usersession');
  Route::get('/', 'PageController@index');
  Route::get('/logout', 'UsersController@logout');
  Route::get('/get_all_leads', 'LeadTrackerController@get_all');
  Route::get('/get_lead_details', 'LeadTrackerController@show');
  Route::get('/get_admin_id', 'UsersController@get_admin_id');
  Route::get('/get_sub_accounts/{id} ', 'UsersController@get_sub_accounts');


  Route::post('/authenticate_user', 'UsersController@authenticate');
  Route::post('/submit_register', 'UsersController@store');
  Route::post('/submit_add_lead', 'LeadTrackerController@store');
  Route::post('/submit_edit_lead', 'LeadTrackerController@update');
  Route::post('/submit_delete_lead/{id}', 'LeadTrackerController@destroy');

  Route::post('/submit_add_privelege', 'PrivelegesController@store');

соответствующий контроллер (PageController.php)

    <?php

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\URL;

    use Illuminate\Support\Facades\DB;
    use Auth;
    use File;

    class PageController extends Controller {
        private $data = array('title' => '', 'script' => '');

        public function index() {
            return redirect('/login'); 
        }

        public function dataTable($properties = array()){

            /*
                ID label
                columns
                API URL
                column names
            */

            $client = new \GuzzleHttp\Client();

            $idLabel = !isset($properties['id']) ? "a".md5(microtime()) : htmlspecialchars($properties['id']);
            $url = !isset($properties['url']) ? "" : htmlspecialchars($properties['url']);
            $html = "";

            $fetch = $client->request('GET', url($properties['url']), ['connect_timeout' => 3.14]);

            //$html = '<script type="text/javascript">$(document).ready(function() {  $("#'.$idLabel.'").DataTable( {   ';
            //$html .= "ajax: {url: '".$url."',dataSrc: 'data'},columns: [{ data: 'id' }]";
            //$html .= '} ); });</script>';


            $table = "<table id='".$idLabel."'>";
            $table .= "<thead class='thead-dark'><tr><th>id</th></tr></thead>";
            $table .= "</table>";


            $htmls = [
                'div' => $table, 
                'html' => $fetch->getBody()
            ];   

            return $htmls;
        }



        public function lead_tracker_page() {
            $data = $this->data;
            $data['title'] = 'ISR | Lead Tracker';


            $data['dataTable'] = $this->dataTable(['url' => '/get_all_leads']);



            $data['page_script'] = url('/') . '/js/pages/lead_tracker.js';
            return view('pages.lead_tracker_page')->with($data);
        }

Любойпомощь будет оценена.Спасибо

1 Ответ

1 голос
/ 24 мая 2019

Здесь вы устанавливаете время соединения на 3,14 секунды.

    $fetch = $client->request('GET', url($properties['url']), ['connect_timeout' => 3.14]);

Это означает, что клиент Guzzle ждет 3,14 секунды и пытается подключиться к запрошенному URL.Если он не может подключиться к URL-адресу в 3.14, он выдает ошибку тайм-аута.

Так что вы можете сделать:

1) удалить опцию тайм-аута и таким образом установить ее по умолчанию => ноль (0)

(0) => означает, что ожидание бесконечно (поведение по умолчанию)

или 2) увеличивает время ожидания как минимум до 10 секунд.

Вы можете прочитать об этой опции на официальном сайте жрет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...