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