Задача. Онлайн-школа проводит уроки гитары и фортепиано один на один. Раньше урок шёл в стороннем видеосервисе, расписание в таблице, оплата отдельной ссылкой: ученик забывал, куда заходить, преподаватель искал, кто заплатил, звук отставал, а ноты показывали фотографией. Нужен был кабинет, где ученик видит ближайший урок и одной кнопкой попадает в комнату.
Решение. Серверная часть на Nest.js поверх Node.js, разбита на модули: пользователи, расписание, оплаты, комнаты уроков. Видео и звук идут через WebRTC напрямую между браузерами, для учеников за корпоративными сетями и на мобильном интернете стоит TURN-сервер. Звук настроил так, чтобы шумоподавление не резало инструмент, от эха советую наушники.
Через Socket.IO работают нотная доска с пометками тактов, общий метроном с темпом от преподавателя и чат, при коротком обрыве соединение восстанавливается само. Старый API записи на Express продолжил работать: Nest.js обращается к нему как к внешнему сервису, запросы переносятся по одному, расписание не останавливалось. После урока в кабинете остаются заметки и задание на неделю.
Результат. Ученики заходят на урок со страницы школы, преподаватели видят график, оплаты и ноты в одном окне, путаница со ссылками исчезла. Играть вместе в одном темпе по сети нельзя из-за задержки, поэтому уроки строятся как показ и повтор.
Евгений Росляков, сайты с 2016 года. Работаю как самозанятый по договору, закрывающие документы для юрлиц.