Рубрики
Uncategorized

Laravel использует простой способ отслеживания того, находятся ли пользователи в Сети

Автор оригинала: David Wong.

Статья была переслана из профессионального сообщества разработчиков laravel. Оригинальная ссылка: https://learnku.com/laravel/t

Сегодня моя задача-добавить зеленую точку рядом с именем пользователя на странице профиля пользователя приложения laravel, чтобы указать, находятся ли они в сети или нет. Первое, о чем я думаю, это то, что нам нужно будет запустить узел. JS-сервер и отслеживание активных подключений к сокетам каждого пользователя. Затем с помощью текущего сокета пользователя для входа в систему мы можем обновлять онлайн-статус в режиме реального времени! Единственная проблема заключается в том, что это наше текущее требование, немного завышенное, и оно не является полностью необходимым до тех пор, пока нашей функции не потребуется достичь второй точности, такой как чат в реальном времени.

Один коллега отметил, что того, как MySpace работает с “онлайн” функциями, может быть достаточно для текущих потребностей. Насколько нам известно, способ, которым MySpace показывает, находятся ли пользователи в Сети, основан на их последней активности на сайте. Если их последнее действие происходит в течение X минут, мы отобразим значок “онлайн”, если нет, мы этого не сделаем. Все просто!

Давайте добавим поле в таблицу пользователей для последнего действия пользователя и обновим его при запросе каждой страницы. Затем, когда нам нужно проверить, находятся ли пользователи в Сети, мы можем сравнить метку времени с текущей меткой времени. Если в течение X минут они будут в сети! Хотя это работает хорошо, в зависимости от приложения, которое вы создаете, это добавит ненужную Запись в , что в некоторой степени замедлит работу вашего приложения. Хорошим компромиссом является хранение этой информации в кэше приложения.Преимущество кэширования заключается в том, что его можно упростить, поскольку вы можете установить срок действия кэша.

Теперь, когда мы решили реализовать эту функцию с помощью кэширования, следующий вопрос заключается в том, где должен выполняться этот код, чтобы он выполнялся при каждом запросе? У меня есть две идеи:

  1. Создайте базовый контроллер и позвольте всем вашим контроллерам унаследовать его
  2. Создание промежуточного программного обеспечения

После некоторых размышлений и осознания того, что мне нужно добавить вызов родительского конструктора во все написанные мной конструкторы, я решаю реализовать его в промежуточном программном обеспечении.

У нас есть план, давайте введем код!

Во-первых, нам нужно создать промежуточное программное обеспечение. Введите следующую команду в терминале:

php artisan make:middleware LogLastUserActivity

Далее мы открываем следующий PHP-файл app/Http/Middleware/LogLastUserActivity.php. Добавьте следующий код в метод дескриптора:

if(Auth::check()) {
    $expiresAt = Carbon::now()->addMinutes(5);
    Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
}

Далее мы открываем приложение/HTTP/kernel.php досье. Если вы используете laravel 5.1 или более раннюю версию, вам следует поместить код непосредственно в $промежуточное программное обеспечение Массив, если ваша версия 5.2. *, *, вы должны поместить код в $группы промежуточного программного обеспечения В сети. Обязательно введите код в Начало сеанса Под промежуточным программным обеспечением, в противном случае портал аутентификации не будет корректно входить в систему пользователя. Мои параметры конфигурации обновления следующие:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class
        \App\Http\Middleware\VerifyCsrfToken::class,
        \App\Http\Middleware\LogLastUserActivity::class,
    ],
    'api' => [
        'throttle:60,1',
    ],
];

Последний шаг-добавить метод в наш пользовательский объект для определения значения. В ПРИЛОЖЕНИИ/user.php, мы добавляем следующие методы:

public function isOnline()
{
    return Cache::has('user-is-online-' . $this->id);
}

Теперь вы можете добавить следующие методы на любую страницу:

@if($user->isOnline())
    user is online!!
@endif

Важный – обязательно используйте use в верхней части вашего файла, чтобы включить все фасады!

Я надеюсь, что вышесказанное поможет вам решить эту проблему!

Оригинал: “https://developpaper.com/laravel-uses-a-simple-way-to-track-whether-users-are-online/”