Как правильно реализовать обмен сообщениями между пользователями?
самый оптимальный вариант с точки зрения производительности - websockets. Можно реализовать на ReactPHP (+libav например) или node.js с шиной данных на zeromq/rabbitmq с основным приложением (в любом случае нужно будет организовывать).
Посмотрите в сторону протокола XMPP.