SocketIO + Laravel + Redis + MySQL. как быть?
На мой взгляд здесь Laravel пришит сбоку с припеку. Node.js умеет работать с MySQL.
Я бы подобный сервис реализовал следующим образом:
Node.js в качестве основного сервера с API и траспортом данных через Socket.io.
Redis в качестве шины сообщений между инстансами Node.js сервера.
Веб-сокеты позволяют обмен данными и пересылку файлов. Ajax в целом вам тут и не нужен.
IMHO, отправка сообщения должна выглядеть следующим образом:
Node.js принимает сообщение из сокетов, выдает идентификатор сообщению и далее передает его по шине сообщений (Redis). На шине несколько слушателей, один из которых отвечает за сохранение данных в базе, а другие рассылают сообщения клиентам.
Заявка в друзья выглядит следующим образом:
Node.js принимает сообщение из веб-сокетов, сохраняет в базу, отправляет запрос по шине сообщений получателю.
При загрузке приложения, клиент соединяется с сервером через веб-сокеты, далее регистрируется на шине сообщений.
Хочу добавить пару моментов, которые нужно учитывать при разработке приложения.
1. У вас может быть запущено несколько инстансов приложения как на одном сервере, так и на разных.
2. Нужно контролировать момент, когда система пытается переотправить сообщение в случае потери соединения с инстансом - часто случается при ненадежном соединении с сетью, особенно в мобильных сетях.
Если в качестве API у вас Laravel, то тогда Node должен быть только как посредник между клиентом и API, а именно его задача такая, когда API вызывает некое событие и отправляет его в Redis на определенный канал. В свою очредь Node должен слушать изменения в редисе, и когда такое событие появляется, Node через WebSocket отправляет его клиентам, которые подписаны на канал. Тоесть если у вас API на Laravel, то Node не должен лезть  в базу,  а всеголишь слушать редис.
Другое дело когда в качестве сервера у вас Node. Тогда вам редис тут и не нужен, всей обработкой занимается нод и он же самостоятельно шлет данные в канал