Чат на Laravel 5.6 + Ratchet. Часть 4. Работа над ошибками

В первой части забыл упомянуть один момент. Чтобы ваша команда

php artisan push_server:serve

запускалась, ее надо прописать в классе Kernel в файле app/Console/Kernel.php

protected $commands = [

  \App\Console\Commands\PushServer::class,
];

Далее. Если ваш сервер ВНЕЗАПНО упал, можно его конечно перезапустить вручную. Но мы же программисты! Так что давайте автоматизировать. Изменим немного клиентский код:

let conn = new ab.connect(
    'ws://' + ip + ':8080',
    function (session) {
      session.subscribe('onNewData', function (topic, data) {
        notification(data.data);
      });
    },

    function (code, reason, detail) {
      console.warn('Websocket connection closed! Code = ' + code + '; Reason = ' + reason + '; Detail = ' + detail + ';');
      restartPushServerAjax(); //Добавили вот эту строчку
    },
    {
      'maxRetries'          : 60,
      'retryDelay'          : 4000,
      'skipSubprotocolCheck': true
    }
  );
function restartPushServerAjax(){
  ajaxSetup();
  $.ajax({
    url     : "/restartPushServerAjax/",
    dataType: "json",
    success : function (data) {
      console.log(data);
    },
    error   : function (jqxhr, status, errorMsg) {
      ajaxErrorsHandling(jqxhr, status, errorMsg);
    }
  });
}

И пропишем роут для этой функции:

Route::get('/restartPushServerAjax/', function () {
    $restart = Artisan::call('push_server:serve');
    if ($restart) {
        echo json_encode(['success' => 'Server restarted']);
    } else {
        echo json_encode(['fail' => 'Error occurred']);
    }
});

Первая часть
Вторая часть
Третья часть

Добавить комментарий