Создаём народный чат-рулетку
Чат-рулетку придумал школьник Андрей Терновский в 2009 году. В таком чате можно знакомиться и обсуждать интересные темы со случайными собеседниками. Нужен только браузер, веб-камера и микрофон. Я думаю это хорошая и очень полезная идея. С тех пор появилось не мало клонов сайта Андрея, но в существующих реализациях есть много минусов. Поэтому у меня возникла идея создать чат-рулетку с открытым исходным кодом, где пользователи смогут предлагать свои идеи функционала для реализации. В этой статье сначала изложу свои мысли о целях и проблемах данного сервиса, а в конце поделюсь некоторой технической информацией моей реализации.
Проект я назвал OpenChatRoulette: https://github.com/andchir/openchatroulette
Сайт: https://openchatr.com/ru/
Пока реализован только самый необходимый функционал. В разделе "Issues" вы можете создавать задачи со своими идеями и найденными багами.
Зачем?
Кроме общения между людьми чат-рулетку часто используют видео-блогеры для создания контента. Кто-то из них создаёт развлекательный контент, кто-то политический. На YouTube сейчас такие ролики собирают тысячи просмотров.
Так же чат-рулетка даёт возможность общения одиноким людям. Да, есть и отрицательные стороны таких чатов, об этом позже.
Безопасность
Для создания соединения и передачи потоковых данных (звук, видео, сообщения) по технологии "точка-точка" (P2P) используется WebRTC. Эта технология очень удобна с точки зрения экономии ресурсов, т.к. в основном используются ресурсы двух собеседников, а не сервера, на котором установлено программное обеспечение. Если соединение "точка-точка" невозможно, используется TURN сервер, тогда соединение "точка-точка" (клиент-клиент) превращается в "клиент-сервер-клиент". В любом случае пользователи чат-рулетки должны понимать, что если они хотят сохранить свою приватность, то должны использовать VPN, так же как с посещением любых других сайтов сети Интернет.
Некоторые чаты-рулетки сейчас запрещают собеседникам скрывать свои лица. Но я считаю, что делать этого нельзя, у людей могут быть вполне оправданные причины. Например, они не хотят, чтобы их преследовали по политическим причинам в странах, где отсутствует свобода слова.
Я думаю использование виртуальных веб-камер нужно тоже разрешить, это даёт дополнительные возможности для создания интересного контента, а так же для скрытия при необходимости своего лица. Для борьбы с мошенниками нужно сделать предупреждение о том, что собеседник использует виртуальную веб-камеру (это в планах).
Я думаю всех любителей показывать свои интимные места нужно отправлять в раздел "Знакомства 18+". Позже планируется возможность для модератора отправлять туда насильно.
Авторизация
На данный момент в самых известных чатах-рулетках требуется регистрация и авторизация пользователей (в том числе через соц. сети). Я думаю это сделано для дополнительной возможности блокировки пользователей, чтобы потом предложить им платную разблокировку. Или для возможности деанонимизации пользователей для каких-то целей. По-моему это ещё один очень большой минус существующих чатов-рулеток, который нужно исключить. Как уже говорилось, пользователей можно не банить, а насильно отправлять в отдельную группу в случае нарушения ими правил.
Техническая информация
В своем проекте во фронтенд части я использовал JS-фреймворк Angular c NGXS и Bootstrap, т.к. давно работаю с этими инструментами. На серверной стороне NodeJS с PeerJS. Для определения страны пользователя используется MaxMind GeoIP2. Также на сервере установлен Coturn - TURN/STUN сервер для WebRTC.
Если вам понравился этот проект, прошу делиться своими идеями в комментариях и в разделе задач на GitHub.