Какой стек технологий лучше выбрать для разработки чата?
зачем все так усложнять

рабочий чат на websocket лежит в примерах наверное любой документации к websocket, первый же нагугленный проект (бакэнд на go но там код на 20 строк все понятно) на столько простой что даже непонятно что непонятно

а еще есть webrtc, эта технология дает еще один механизм коммуникации между пользователями вообще минуя сервер, добавь сюда шифрование и failover при неработающем webrtc и получишь готовый проект
Суть в том, что я не совсем понимаю работу вебсокетов
Клиент отправляет на сервер 1 HTTP запрос, после которого у него остаётся на длительное время открытое двухстороннее соединение, по которому он может общаться с сервером, будто у него сырой TCP-сокет (по факту так и есть).

Подробнее можно почитать на MDN.

Может быть сам чат никто с 0 не пишет и есть какие-то готовые решения?
На самом деле подобные анонимные чаты на столько легко реализуются, что проще написать самому, чем пытаться найти готовое решение.

Насколько хорош мой выбор(yii2+vue+mongo)? 
Не уверен только на счёт mongo, тк в моих глазах это очень специфичное решение, которое не везде есть смысл применять.
Если у тебя зафиксирована структура данных, и при этом у тебя нет кучи разных данных, которые хочется хранить в денормализованном виде, то реляционная СУБД будет, вероятно, и эффективнее и проще.
Возможно, mongodb будет иметь смысл, если ты захочешь работать с сотнями тысяч клиентов, и тебе нужно будет распределять данные на несколько серверов (возможно, в разных ДЦ)

yii2 - вполне ок вариант, раз у тебя уже есть опыт работы с ним. Модули для работы с вебсокетами для него есть.