WebSocket Bağlantılarını Yönetme: Gerçek Zamanlı İletişim
WebSocket, HTTP'nin aksine sürekli açık bir bağlantı sağlar. Sunucu ve istemci arasında çift yönlü iletişim mümkün olur. Sohbet uygulamaları, canlı bildirimler ve oyunlar için ideal.
Python'da `websockets` kütüphanesi ile sunucu tarafı çok basit. Her bağlanan istemciyi takip edip broadcast yapabilirsin.
1pip install websocketsSunucu kodu:
Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import asyncio2import websockets3import json45connected_clients = set()67async def handler(websocket, path):8connected_clients.add(websocket)9print(f"Yeni bağlantı: {len(connected_clients)} aktif")1011try:12async for message in websocket:13data = json.loads(message)14print(f"Alındı: {data}")1516# Tüm istemcilere gönder17if connected_clients:18await asyncio.gather(19*[client.send(json.dumps({"user": data.get("user"), "text": data.get("text")})) 20for client in connected_clients]21)22except websockets.exceptions.ConnectionClosed:23pass24finally:25connected_clients.remove(websocket)26print(f"Bağlantı kapandı: {len(connected_clients)} aktif")2728async def main():29async with websockets.serve(handler, "localhost", 8765):30print("WebSocket sunucusu 8765 portunda çalışıyor...")31await asyncio.Future()3233if __name__ == "__main__":34asyncio.run(main())JavaScript istemcisi:
1const ws = new WebSocket("ws://localhost:8765");23ws.onopen = () => {4console.log("Bağlı!");5ws.send(JSON.stringify({user: "Ali", text: "Merhaba"}));6};78ws.onmessage = (event) => {9const data = JSON.parse(event.data);10console.log(`${data.user}: ${data.text}`);11};1213ws.onerror = (error) => {14console.error("Hata:", error);15};1617ws.onclose = () => {18console.log("Bağlantı kapandı");19};Beklenen çıktı (terminal):
1WebSocket sunucusu 8765 portunda çalışıyor...2Yeni bağlantı: 1 aktif3Alındı: {'user': 'Ali', 'text': 'Merhaba'}4Bağlantı kapandı: 0 aktifSık yapılan hata: `connected_clients` setine sadece ekle-çıkar yapma; bağlantı kayıplarında hata alırsın. Her zaman `try-finally` ile temizle. Ayrıca `asyncio.gather()` kullanarak paralel gönderişi hızlandır, yoksa istemci sayısı arttıkça gecikme yaşarsın.
0 yorum