Моя рабочая машина крутится на виртуалке Parallels, это ElementaryOS на основе Ubuntu, веб сервер Nginx. Описывать ниже установку Laravel, работу с виртуальными хостами ниже я не буду: пост посвящен только настройке и старту вебсокетов, точнее говоря — пример его использования. Мануал практически полностью передран отсюда, можете смело использовать его — там дается чуть более детальная информация по шагам. Правда, есть там и ошибки в описании: в test.blade.php используется ссылка на файл socket.io.js в папке assets, но как он туда попал — описания нет. В этом же файле я использовал ссылку https://cdn.socket.io/socket.io-1.4.5.js. В остальном мои шаги практически ноздря в ноздрю повторяют действия в туториале.

Само разворачивание системы довольно простое и у более-менее подготовленного разработчика может занять не более 10-15 минут. В основе подхода лежат Laravel Events и перехватка Redis’ом сообщений и отправка их на сокет (по крайней мере я так понял, если я в чем-то не прав, извините).

Убедитесь, что на вашем сервере установлен Redis и Node. Проверяется это командами

Если ответы у вас такие (или примерно такие — версия Node может быть разной), то переходим к следующему шагу. Если нет, то в интернете можно найти как установить необходимые пакеты на вашей системе.

Устанавливаем необходимые пакеты:

Создаем Event через Artisan:

Файл EventName создался в директории app/Events/EventName.php. Убедитесь, что он реализует интерфейс ShouldBroadcast

В этом ивенте мы будем получать (или генерировать, как в примере) данные, которые будем отправлять через сокет как json.

Далее создадим вьюшки, которые мы будем дергать из веба.

master.blade.php

test.blade.php

Роутинг для вьюшек.

В корне проекта создадим файл socket.js

Укажем в Laravel использование правильного Broadcast драйвера для нас, для этого добавим в .env строку

Другим вариантом назначения redis в качестве драйвера является изменение соответствующей строки в конфиге по адресу /config/broadcastring.php.

Заключительный этап — запуск сервера:

Теперь в одной вкладке (/fire) мы дергаем обновление данных, а в другой вкладке (/test) эти данные должны появляться сразу же. Все это также тестировал на Android устройстве (с написанием клиента на сокете).