Laravel
Laravel’de WebSocket Kullanımı ve Real-Time Uygulamalar

Günümüzde web uygulamaları artık gerçek zamanlı etkileşime ve anlık güncellemelere ihtiyaç duymaktadır. Laravel, WebSocket teknolojisi ile bu gereksinimleri karşılamak için güçlü bir altyapı sunar. Bu blog yazısında, Laravel’de WebSocket kullanımı ve gerçek zamanlı uygulamaların nasıl oluşturulabileceği hakkında detaylı bilgiler bulacaksınız.
- WebSocket Nedir?
WebSocket, sunucu ve istemci arasında çift yönlü iletişim sağlayan bir ağ protokolüdür. Geleneksel HTTP istek-cevap modeline kıyasla WebSocket, sunucu tarafından istemciye veri gönderme yeteneği sunar. - Laravel ve WebSocket
Laravel, güçlü bir PHP çerçevesi olduğu için WebSocket desteğini de sağlar. Bu, gerçek zamanlı uygulamalar oluşturmak için kullanılabilir. - Ratchet Kütüphanesi
Ratchet, Laravel projelerinde WebSocket sunucusu oluşturmak için yaygın olarak kullanılan bir kütüphanedir. Composer aracılığıyla Laravel projesine eklenerek kullanılabilir. - Composer Kurulumu
Öncelikle, bir Laravel projesine Ratchet kütüphanesini eklemek için Composer’ı kurmanız gerekmektedir. Composer’ı kurduktan sonra,composer require cboden/ratchet
komutunu kullanarak Ratchet kütüphanesini projenize ekleyebilirsiniz. - WebSocket Sunucusunun Oluşturulması
Ratchet kütüphanesi ile WebSocket sunucusu oluşturmak için, birChat
sınıfı oluşturacağız. Bu sınıf,MessageComponentInterface
‘i uygulayacak ve WebSocket bağlantılarını yönetecektir. - Chat Sınıfının Oluşturulması
Laravel projesindeapp
dizini altındaChat.php
adında bir sınıf oluşturun ve aşağıdaki kodu içine ekleyin:
namespace App;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Chat implements MessageComponentInterface
{
// ...
}
- Chat Sınıfının İmplementasyonu
Chat sınıfı,MessageComponentInterface
‘i uyguladığı içinonOpen
,onMessage
,onClose
veonError
gibi yöntemleri uygulamalıdır. Bu yöntemler WebSocket bağlantısı sırasında çağrılır. - onOpen Yöntemi
onOpen
yöntemi, bir istemci WebSocket bağlantısı açtığında tetiklenir. Bu yöntemi aşağıdaki gibi uygulayabilirsiniz:
public function onOpen(ConnectionInterface $conn)
{
// Bağlantı açıldığında yapılacak işlemler
}
- onMessage Yöntemi
onMessage
yöntemi, sunucudan gelen bir mesaj aldığında tetiklenir. Örneğin, bir istemci bir mesaj gönderdiğinde bu yöntem çağrılır.onMessage
yöntemini aşağıdaki gibi uygulayabilirsiniz:
public function onMessage(ConnectionInterface $from, $msg)
{
// Mesaj alındığında yapılacak işlemler
}
- onClose Yöntemi
onClose
yöntemi, bir istemci WebSocket bağlantısını kapattığında tetiklenir. Bu yöntemi aşağıdaki gibi uygulayabilirsiniz:
public function onClose(ConnectionInterface $conn)
{
// Bağlantı kapandığında yapılacak işlemler
}
- onError Yöntemi
onError
yöntemi, bir hata oluştuğunda tetiklenir. Bu yöntemi aşağıdaki gibi uygulayabilirsiniz:
public function onError(ConnectionInterface $conn, \Exception $e)
{
// Hata durumunda yapılacak işlemler
}
- Bağlantıların Yönetimi
Chat
sınıfı, aktif WebSocket bağlantılarını yönetmek için bir mekanizma sağlar. Örneğin, bağlantıları depolamak ve belirli bir istemciye mesaj göndermek için bir dizi kullanabilirsiniz. - Bağlantıları Depolama
Aktif WebSocket bağlantılarını depolamak içinSplObjectStorage
sınıfını kullanabilirsiniz. Bu sınıf, bağlantıları depolamak ve ilişkilendirmek için uygun bir yöntem sağlar. - Bağlantıları Depolama Örneği
Chat
sınıfının yapıcı yönteminde birSplObjectStorage
örneği oluşturabilirsiniz:
public function __construct()
{
$this->clients = new \SplObjectStorage;
}
- Bağlantıları Ekleme ve Kaldırma
onOpen
veonClose
yöntemlerinde bağlantıları ekleyip kaldırabilirsiniz. Örneğin:
public function onOpen(ConnectionInterface $conn)
{
$this->clients->attach($conn);
}
public function onClose(ConnectionInterface $conn)
{
$this->clients->detach($conn);
}
- Mesajları Yayınlama
Belirli bir istemciye veya tüm istemcilere mesaj yayınlamak içinonMessage
yöntemini kullanabilirsiniz. Örneğin:
public function onMessage(ConnectionInterface $from, $msg)
{
foreach ($this->clients as $client) {
$client->send($msg);
}
}
- Laravel Projesinde WebSocket Sunucusunu Başlatma
WebSocket sunucusunu başlatmak için, Laravel projesinde bir komut dosyası oluşturabilir ve Ratchet sunucusunu başlatabilirsiniz. - Console Komutunu Oluşturma
Laravel projesindeapp/Console/Commands
dizini altında bir komut dosyası oluşturun. Örneğin,WebSocketServer.php
olarak adlandırabilirsiniz. - WebSocket Sunucusunu Başlatma Kodu
Oluşturduğunuz komut dosyasına aşağıdaki gibi bir kod ekleyebilirsiniz:
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Ratchet\Server\IoServer;
use App\Chat;
class WebSocketServer extends Command
{
protected $signature = 'websocket:server';
public function handle()
{
$server = IoServer::factory(
new Chat(),
8080
);
$server->run();
}
}
- WebSocket Sunucusunu Çalıştırma
Komut satırında, Laravel projesinin kök dizininde aşağıdaki komutu çalıştırarak WebSocket sunucusunu başlatabilirsiniz:
php artisan websocket:server
- WebSocket İstemcisi ile Bağlantı Kurma
Laravel projenizde WebSocket sunucusunu başlattıktan sonra, WebSocket istemcisi ile bağlantı kurabilirsiniz. Örneğin, JavaScript tabanlı bir istemci kullanabilirsiniz. - WebSocket İstemcisi ile Bağlantı Kurma Örneği
Aşağıdaki örnek kodda, JavaScript tabanlı bir WebSocket istemcisiyle bağlantı kurulduğunu görebilirsiniz:
var socket = new WebSocket('ws://localhost:8080');
socket.onopen = function() {
console.log('Bağlantı başarılı.');
};
socket.onmessage = function(e) {
var message = e.data;
console.log('Mesaj alındı: ' + message);
};
socket.onclose = function() {
console.log('Bağlantı kapatıldı.');
};
socket.onerror = function(error) {
console.log('Hata oluştu: ' + error);
};
- WebSocket İstemcisi ile Mesaj Gönderme
WebSocket istemcisi aracılığıyla sunucuya mesaj göndermek içinsocket.send()
yöntemini kullanabilirsiniz. Örneğin:
var message = 'Merhaba!';
socket.send(message);
- Laravel ve WebSocket ile Gerçek Zamanlı Uygulama Örneği
Artık Laravel ve WebSocket ile gerçek zamanlı bir uygulama oluşturmak için gereken temel adımları tamamladınız. Şimdi, örnek bir gerçek zamanlı uygulama geliştirelim. - Örnek Gerçek Zamanlı Uygulama Senaryosu
Örnek bir gerçek zamanlı uygulama senaryosu olarak, bir anlık sohbet uygulaması üzerinde çalışalım. Kullanıcılar, sohbet odalarına katılabilir ve gerçek zamanlı olarak mesajlaşabilir. - Gerçek Zamanlı Uygulama Veritabanı Modeli
Öncelikle,ChatRoom
veMessage
adında iki veritabanı modeli oluşturalım.ChatRoom
, sohbet odalarını temsil edecek veMessage
, gönderilen mesajları temsil edecek.
- ChatRoom Modeli
ChatRoom
modelini oluşturmak için aşağıdaki gibi bir migration ve model dosyası ekleyebilirsiniz:
php artisan make:migration create_chat_rooms_table --create=chat_rooms
php artisan make:model ChatRoom
- Message Modeli
Message
modelini oluşturmak için aşağıdaki gibi bir migration ve model dosyası ekleyebilirsiniz:
php artisan make:migration create_messages_table --create=messages
php artisan make:model Message
- Gerçek Zamanlı Mesaj Gönderme
Gerçek zamanlı mesaj gönderme işlemi için, WebSocket sunucusundaonMessage
yöntemini aşağıdaki gibi güncelleyebilirsiniz:
public function onMessage(ConnectionInterface $from, $msg)
{
$data = json_decode($msg, true);
// Mesaj verilerini kaydetme işlemleri
foreach ($this->clients as $client) {
$client->send(json_encode($data));
}
}
- Gerçek Zamanlı Mesaj Alma
Gerçek zamanlı mesaj alma işlemi için, WebSocket istemcisi tarafındasocket.onmessage
olayını aşağıdaki gibi güncelleyebilirsiniz:
socket.onmessage = function(e) {
var message = JSON.parse(e.data);
// Alınan mesajı görüntüleme işlemleri
};
Bu blog yazısında, Laravel’de WebSocket kullanımı ve gerçek zamanlı uygulamalar oluşturmanın temel adımlarını öğrendik. WebSocket sunucusu oluşturma, bağlantı yönetimi, mesaj gönderme ve alma gibi konulara değindik. Laravel ve WebSocket’in birleşimiyle güçlü gerçek zamanlı uygulamalar geliştirebilirsiniz. Umarım bu yazı size faydalı olmuştur. Başarılar dilerim!