Python ile WebSocket Kullanımı: Adım Adım Rehber

WebSocket Nedir?

WebSocket, web tarayıcıları ile sunucular arasında iki yönlü, tam çift yönlü iletişim sağlayan bir protokoldür. HTTP protokolüne alternatif olarak geliştirilmiş bir iletişim yöntemidir. WebSocket ile gerçek zamanlı veri iletimi mümkün hale gelirken, sürekli açık bir bağlantı üzerinden veri gönderimi sağlanır. Bu durum, chat uygulamaları, gerçek zamanlı oyunlar ve finansal uygulamalar gibi anlık güncellemeler gerektiren projelerde büyük avantaj sağlar.

WebSocket bağlantısı açıldığında, istemci ve sunucu arasında bir iletişim kanalı oluşturulur. Bu bağlantı boyunca, ikisi de veri gönderip alabilir. Bunun yanı sıra, WebSocket, HTTP’den daha düşük bir gecikme süresi sunmakta ve daha az bant genişliği kullanmaktadır. Yani, belirli aralıklarla veri gönderip almak yerine, her iki tarafın bağlantısı sürekli açık kalır.

Bu makalede, Python kullanarak WebSocket ile nasıl çalışacağınızı öğreneceksiniz. Hem istemci hem de sunucu tarafında WebSocket uygulamalarını nasıl geliştirebileceğinizi adım adım açıklayacağız. Öncelikle, gerekli kütüphaneleri tanıyacağız ve ardından bir örnek proje üzerinden adım adım ilerleyeceğiz.

Gerekli Kütüphaneler

Python’da WebSocket uygulamaları geliştirmek için en yaygın kütüphanelerden biri websockets kütüphanesidir. Bu kütüphane, WebSocket istemcileri ve sunucuları oluşturmak için basit bir API sunar. Kütüphaneyi kurmak için terminal veya komut istemcisine aşağıdaki komutu girerek yükleyebilirsiniz:

pip install websockets

Bunun yanı sıra, WebSocket uygulamalarınızı test etmek için ihtiyacınız olacak bir diğer kütüphane asyncio‘dur. Asynchronous programlama yapmanıza olanak tanır ve WebSocket işlemlerini daha verimli hale getirir. Python 3.8 ve üzeri sürümler, asyncio desteğiyle gelmekte olup, genellikle Python kurulumlarında varsayılan olarak bulunmaktadır.

Ayrıca, WebSocket’leri tarayıcıda test etmek için bir web istemcisi veya basit bir HTML sayfası oluşturmak isteyeceksiniz. Bu sayede istemci tarafındaki WebSocket bağlantısını test edebiliriz.

Basit Bir WebSocket Sunucusu Oluşturma

Artık gerekli kütüphaneleri yüklediğimize göre, basit bir WebSocket sunucusu oluşturarak başlayalım. Aşağıda, bir WebSocket sunucusu kurmak için gereken temel kod örneği bulunmaktadır:

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(f"Sunucudan: {message}")

start_server = websockets.serve(echo, "localhost", 6789)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

Yukarıdaki kodda, echo adında bir asenkron fonksiyon tanımlıyoruz. Bu fonksiyon, istemciden gelen her mesajı echo (yansıtmak) ederek geri gönderir. websockets.serve() fonksiyonu, bağlantıları dinlemek ve yukarıda tanımlanan echo fonksiyonunu çağırmak için kullanılır. Sunucu, ‘localhost’ üzerinde ve 6789 portunda çalışacaktır.

Bu kodu bir Python dosyası (.py uzantılı) olarak kaydedin ve çalıştırın. Sunucunun başlatıldığında, WebSocket bağlantılarını dinlemeye başlayacaktır. Şimdi, istemci tarafı için bir bağlantı kurmamız gerekiyor.

İstemci ile WebSocket Bağlantısı

WebSocket istemcisi olarak, basit bir HTML sayfası oluşturup, JavaScript kullanarak WebSocket bağlantısını gerçekleştirebiliriz. Aşağıdaki kodu bir HTML dosyası olarak kaydedin:

<html>
<head>
    <title>WebSocket İstemcisi</title>
</head>
<body>
    <script>
      const socket = new WebSocket('ws://localhost:6789');

      socket.onopen = function(event) {
          console.log('Bağlantı açıldı');
          socket.send('Merhaba Sunucu!');
      };

      socket.onmessage = function(event) {
          console.log('Sunucudan gelen: ', event.data);
      };
    </script>
</body>
</html>

Yukarıdaki HTML kodu, WebSocket istemcisi olarak çalışacak basit bir yapıdadır. Bağlantı açıldığında, ‘Merhaba Sunucu!’ mesajını göndermektedir. Sunucu mesajı aldıktan sonra, geri göndererek ‘Sunucudan: Merhaba Sunucu!’ sonucunu istemciye ulaştıracaktır. Tarayıcı konsolunu (F12) açarak bu durumu takip edebilirsiniz.

HTML dosyasını bir tarayıcıda açtığınızda, JavaScript kodu çalışacaktır. Tarayıcı konsolunda ‘Bağlantı açıldı’ mesajını görmeli ve sunucudan alınan yanıtı takip etmelisiniz.

WebSocket İletişiminin Yönetimi

WebSocket uygulamalarında iletişim yönetimi oldukça önemlidir. İstemci veya sunucu tarafında hata alındığında, bu durum yeterince ele alınmalıdır. Örneğin, bağlantı kesildiğinde hangi adımların atılacağı, hatanın nasıl yakalanacağı ve yeniden bağlantı yapılma işlemlerinin akışının nasıl yönetileceği net bir şekilde belirlenmelidir.

Sunucu tarafında bir bağlantı kesildiğinde, hata yakalaması yapmak için birkaç güncelleme ekleyelim. Aşağıda, sunucuda bir hatanın nasıl ele alınacağını gösteren güncellenmiş kodu inceleyelim:

async def echo(websocket, path):
    try:
        async for message in websocket:
            await websocket.send(f"Sunucudan: {message}")
    except websockets.exceptions.ConnectionClosed as e:
        print(f'Bağlantı kapandı: {e}')

Yukarıdaki ekleme ile, bağlantı kapandığında bir mesaj basılacaktır. Bu, bağlantı yönetiminin nasıl yapılacağına dair basit bir örnektir. İstemci tarafında da benzer bir yakalama işlemi yaparak bağlantının durumu hakkında kullanıcıyı bilgilendirebiliriz.

Sonuç ve Uygulama Önerileri

Bu makalede, Python ile WebSocket kullanarak nasıl iletişim kurabileceğinizi öğrendiniz. İlk olarak basit bir WebSocket sunucusu oluşturduk, sonrasında bir istemci ile etkileşimde bulunduk. Gerçek zamanlı veri iletimi yapabilen uygulamalar tasarlamak, WebSocket kullanmanın sunduğu avantajlardan sadece birkaçıdır.

WebSocket uygulamalarınızı geliştirirken, özellikle oyun geliştirme, haber akışları veya anlık sohbet uygulamaları konularında uygulama önerileri üzerinde çalışabilirsiniz. Aynı zamanda, güvenlik önlemleri alarak (örneğin TLS/SSL ile güvenli WebSocket bağlantıları kurarak) daha sağlam ve kurumsal uygulamalar geliştirebilirsiniz.

Artık WebSocket ile ilgili temel bilgileri ve kurulumları biliyorsunuz. Bu bilgileri projelerinizde uygulamak için motivasyonunuzu artırın. Öğrendiklerinizi gerçek dünyadaki uygulamalara dönüştürmekten çekinmeyin!

Scroll to Top