1. Для БД + распределения по комнатам - рекомендую использовать Redis Pub/Sub
2. Для чатов все же рекомендовал бы использовать технологии больше для них подходящие и php - не одна из них, смотрите в сторону NodeJS (я сам пишу на php 6+лет)
3. Сразу продумывайте репликацию / шардинг данных между серверами, так как X_комнат*1000/5_сек = X*200 запросов/сек - эт не шутки)))
4. Если нужно сохранять переписки на сервере - вполне реально, что потребуется отдельная приблуда для пакетной загрузки данных из Redis с его последующей очисткой.
5. Обязательно жестко проверяйте входные параметры на размер (POST), на наличие файлов - если такие есть - сразу в бан.
6. Есть еще мысли на счет фильтров: реклама/мат/** но это уже эвристика))
PHP меньше всего подходит для реализации такого функционала. В случае с чатом необходимо иметь постоянное подключение для возможности двустороннего обмена между клиентом и сервером. PHP "из коробки" такую возможность обеспечить не сможет. Есть специальный фреймворк, заточенный на работу скриптов в режиме реального времени, phpDaemon. Но он уже лет 6 разрабатывается и всё ещё сырой. И увы, это далеко не тот PHP, к которому вы привыкли.
> на что первостепенно обращать внимание при оптимизации?
На то, что при каждом запросе PHP должен будет загрузить PHP-скрипт, инициализировать глобальные переменные и переменные, содержащие данные о сервере, обработать входящие данные, распределить их по массивам и внутренним структурам. Еще на каждый запрос будет заново запускаться вся инициализация вашей системы (php-скриптов, фреймворка и т. д.). Потом еще каждый раз заново нужно считать конфиг, подключиться к БД, считать оттуда основные данные, необходимые для работы и прочее, прочее, прочее.
Если используете CGI, а не fpm, то еще необходимо подождать, пока интерпретатор прочитается операционкой с диска, запустится и тд.
Еще раз учтите, что это будет происходить при каждом запросе пользователя. Т. е. с ваших же слов — до 5 раз в секунду при отправках сообщений, плюс сколько-то раз при простых обновлениях списка сообщений в браузерах пользователей.
Вообщем, это дофига лишней работы, не связанной непосредственно с чатом, при каждом запросе. И на это будет уходить большая часть времени и ресурсов.
Поэтому PHP в вашей задаче — не самый подходящий инструмент.
Чтобы использовать PHP, вам придется на нем писать сам сервер и реализовывать асинхронную обработку запросов на его стороне, что в случае PHP не очень тривиально (пхп сам по себе разработан из расчета "обработал запрос и умер").