Для работы требуется только установленные PHP (7.3.2) + NODE/NPM (12.16.3/6.14.4).
После клонирования репозитория:
- Создайте файл .env из .env.example.
- Измените DB_DATABASE на полный абсолютный путь к пустому файлу для хранения базы данных SQLite.
- Выполните в консоли из директории проекта пкоманды
- composer install
- php artisan migrate
- php artisan db:seed
- npm i
- npm run production
- Для запуска WEB вервера: php artisan serve
- В соседнем окне консоли для запуска WS сервера: node resources/js/chat/server.js
- Далее запустите перейдите в браузере по адресу http://127.0.0.1:8000/ и прробуем общаться
Для авторизации используется Laravel, в остальном его роль минимальна.
Анонимный вход поддерживается. Но аноним пока может назодиться только один, так как имеет один и тот же ай ди, не успел проработать этот момент. В файле database/seeders/UserSeeder.php можно найти двоих пользователей.
В качестве фронтенд фреймворка выбран Vue.JS, главным образом для того, чтобы проверить, как он себя поведёт в данном типе задач, плюс проработать компонентный подход. Думаю, без него можно добиться большей отзывчивости интерфейса.
Для записи звука с микрофора, как и предложено, выбран WebAudioRecorder.js, но лишь потому, что используумые кодеки правильно отработали в моём окружении. С точни зрения архитектуры данная бибилитека не оптимальна, так как не лежит в репозитории и требует костылей для простого подключения. Пробовал использовать mic-recorder-to-mp3, которая есть в NPM и имеет более приятный дизайн, но там проблемы с воспроизведением звука в некоторых браузерах.
К сообщению можно прикрепить более одной звукозаписи. Так же, к сообщению можно прикрепить графику, если вставить из буфера обмена в поле текстового ввода.
Прикреплённые файлы отсылаются вместе с текстом одним сообщеним, что требует упаковки в Base64, что неоптимально для производительности на клиенте. Не успел по времени, но могу сделать отправку бинарных данных.