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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. WebSocket Sunucusunun Oluşturulması
    Ratchet kütüphanesi ile WebSocket sunucusu oluşturmak için, bir Chat sınıfı oluşturacağız. Bu sınıf, MessageComponentInterface‘i uygulayacak ve WebSocket bağlantılarını yönetecektir.
  6. Chat Sınıfının Oluşturulması
    Laravel projesinde app dizini altında Chat.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
{
    // ...
}
  1. Chat Sınıfının İmplementasyonu
    Chat sınıfı, MessageComponentInterface‘i uyguladığı için onOpen, onMessage, onClose ve onError gibi yöntemleri uygulamalıdır. Bu yöntemler WebSocket bağlantısı sırasında çağrılır.
  2. 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
}
  1. 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
}
  1. 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
}
  1. 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
}
  1. 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.
  2. Bağlantıları Depolama
    Aktif WebSocket bağlantılarını depolamak için SplObjectStorage sınıfını kullanabilirsiniz. Bu sınıf, bağlantıları depolamak ve ilişkilendirmek için uygun bir yöntem sağlar.
  3. Bağlantıları Depolama Örneği
    Chat sınıfının yapıcı yönteminde bir SplObjectStorage örneği oluşturabilirsiniz:
public function __construct()
{
    $this->clients = new \SplObjectStorage;
}
  1. Bağlantıları Ekleme ve Kaldırma
    onOpen ve onClose 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);
}
  1. Mesajları Yayınlama
    Belirli bir istemciye veya tüm istemcilere mesaj yayınlamak için onMessage yöntemini kullanabilirsiniz. Örneğin:
public function onMessage(ConnectionInterface $from, $msg)
{
    foreach ($this->clients as $client) {
        $client->send($msg);
    }
}
  1. Laravel Projesinde WebSocket Sunucusunu Başlatma
    WebSocket sunucusunu başlatmak için, Laravel projesinde bir komut dosyası oluşturabilir ve Ratchet sunucusunu başlatabilirsiniz.
  2. Console Komutunu Oluşturma
    Laravel projesinde app/Console/Commands dizini altında bir komut dosyası oluşturun. Örneğin, WebSocketServer.php olarak adlandırabilirsiniz.
  3. 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();
    }
}
  1. 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
  1. 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.
  2. 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);
};
  1. WebSocket İstemcisi ile Mesaj Gönderme
    WebSocket istemcisi aracılığıyla sunucuya mesaj göndermek için socket.send() yöntemini kullanabilirsiniz. Örneğin:
var message = 'Merhaba!';
socket.send(message);
  1. 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.
  2. Ö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.
  3. Gerçek Zamanlı Uygulama Veritabanı Modeli
    Öncelikle, ChatRoom ve Message adında iki veritabanı modeli oluşturalım. ChatRoom, sohbet odalarını temsil edecek ve Message, gönderilen mesajları temsil edecek.
  1. 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
  1. 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
  1. Gerçek Zamanlı Mesaj Gönderme
    Gerçek zamanlı mesaj gönderme işlemi için, WebSocket sunucusunda onMessage 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));
    }
}
  1. Gerçek Zamanlı Mesaj Alma
    Gerçek zamanlı mesaj alma işlemi için, WebSocket istemcisi tarafında socket.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!


İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu
Bu internet sitesinde size en iyi deneyimi sunmak için çerezleri kullanıyoruz. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz.
Kabul Et
Reddet
Privacy Policy