Merhaba,
genel olarak 2 seçenek var ,
ilk i seninde söylediğin gibi, ajax tabanlı olan
1- Comet yada long polling diye bilinen yöntem. (belirli aralıklarla, ajax requestlerle yeni mesaj var mı yok diye kontrol edilmesi gibi)
diğeri ise yeni protokollerden birininin kullanımı,
2- webRTC yada web socket .
benim tecrübelerimden şimdiye dek edindiğim izlenim; webRTC ağır bir protokol ve media transferi olmaycaksa (video chat, sesli mesajlaşma vs. gibi) klasik websocket kullanimi sade ve daha kolay.
PHP uygulamaları ile aynı anda ornegin laravel ile birlikte veya aynı suncuda yine php ile laravel siz bir de websocket sunucusu hostetmek sıkıntıya sebeb olabiliyor, RAM maliyetleri artıyor, websocket üzerinden JSON payload(JSON formatında veri transferi) hafif olduğu için bandwidth sorunu yaşanmıyor ama başka sorunlara sebeb oluyor.
Birde yetkilendirme sorunu Laravel içindeki kullanıcı sistemiyle socket trafiğini kontrol etmekde zorluklara sebep oluyor . Bizdeki real-time trafik yoğun du ve chat den ziyade çalışan sistemlerimizin çalışma durumları vs i kontrol etmek için kullandığımız bir sistem. Yoğun mesajlaşma içeriyor. Ayrıca sisteme gelen tüm API requesetlerini real-time görebilme, Online kullanıcılar, kim ne yapıyor vs takip için "geliştiriciler olarak kendi iç sistemimiz için" kullanıyoruz Kısacası şöyle bir şey yaptık;
socket.io ile küçük bir node.js sunucusu yazdık süreç kolay ve internette bolca örnek var. Socket trafiğinin ve socket üzerinden mesaj yolladığın istemci sayısının yoğunluğuna göre, (eğer mesaj alacak kişi sayısı ve mesaj yoğunluğu fazlaysa) göndermek yada almak istediğin mesajı laravel içinden redis e yazıp node.js ile alıcılara yollayabilirsin.
burada güzel bir örnek var.
https://github.com/oriceon/laravel-5-redis-and-socket.io
Redis kullanımı zorunlu değil fakat şöyle bir avantajı var, mesaj gönderme ve alma katmanını abstract etmiş oluyorsun ve sonra trafik artarsa birden fazla sunucuyu redis bağlayıp ölçeklendirebilme adına kolaylık elde etmiş oluyorsun. Bir de PHP içinde websocket mesajlarını senkron olarak gönderebileceğin için uygulamanın iş yükü artırma durumu söz konusu. Web socketler socket.io vb sağlam bir framework kullanamadığın sürece çok fazla (tekrar) bağlanma ve kopma sorunu yaşatabiliyor. Redis e senkron olarak yazsaniz dahi cok hizli oldugu icin uygulamaniz her hangi bir blokaja girmiyor.
Eğer trafik az ise yada node.js kullanmak istemiyorsan, aşağıdaki alternatiflere bakabilirsin,
Rachet :
http://socketo.me/
Pusher :
https://pusher.com/
birde tabi pubnub var güzel bir sistem bulut alt yapısı pusher a göre daha kolay ve ekonomik bence eğer bu tarz bir cloud sistem kullancaksan en ideali PubNub
https://www.pubnub.com/docs/php/pubnub-php-sdk
Ayrıca google da Pubnub laravel diye aratırsan Laravel paketleride çıkıyor, entegre etmek çok zor olmasa gerek.
Bunlar benim az çok denediklerim, Node.js+Redis ve Laravel benim tecrübelerime göre en ideali. Bunların dışında başka alternatiflerde vardır illaki diğer arkadaşlardan başka alternatifleri de yazanlar olur mutlaka.
Kolay Gelsin.