WebSocket
WebSocket, Node.js ortamında istemci ve sunucu arasında çift yönlü, sürekli ve düşük gecikmeli iletişim sağlayan bir protokoldür. Geleneksel HTTP bağlantılarının aksine, WebSocket tek bir kalıcı bağlantı üzerinden veri iletimini mümkün kılar. Bu özellik, gerçek zamanlı uygulamalar, canlı sohbet sistemleri, oyun sunucuları, finansal veri akışları ve interaktif dashboardlar gibi durumlarda kritik öneme sahiptir.
Node.js’in olay odaklı ve asenkron yapısı, binlerce WebSocket bağlantısını bloklamadan yönetmeyi sağlar. Bu yapı sayesinde veri yapıları (Set, Map), algoritmalar ve OOP prensipleri kullanılarak ölçeklenebilir ve yüksek performanslı WebSocket sunucuları geliştirmek mümkündür.
Bu eğitimde, Node.js kullanarak WebSocket sunucusu ve istemcisi oluşturmayı, mesaj gönderip almayı, bağlantı yaşam döngüsünü yönetmeyi ve hataları etkili biçimde ele almayı öğreneceksiniz. Ayrıca, performans optimizasyonu, bellek sızıntılarının önlenmesi ve güvenlik önlemleri gibi ileri düzey konulara da değinilecektir. Bu bilgiler, gerçek dünya Node.js projelerinde WebSocket uygulamalarını güvenli, verimli ve sürdürülebilir şekilde tasarlamanıza yardımcı olacaktır.
Temel Örnek
textconst WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', (socket) => {
console.log('Yeni istemci bağlandı');
socket.on('message', (message) => {
console.log(`Alınan mesaj: ${message}`);
socket.send(`Sunucu mesajı aldı: ${message}`);
});
socket.on('close', () => {
console.log('İstemci bağlantısı kapandı');
});
socket.on('error', (error) => {
console.error('Bağlantı hatası:', error);
});
});
console.log('WebSocket sunucusu 8080 portunda başlatıldı');
Yukarıdaki örnek, 'ws' kütüphanesi kullanılarak basit bir WebSocket sunucusunu göstermektedir. Sunucu 8080 portunda dinlemekte ve her yeni istemci bağlantısını 'connection' eventi ile yönetmektedir. Bu event, istemci ile iletişim için bir socket nesnesi sağlar.
'message' eventi gelen mesajları alır ve yanıt gönderir. 'close' ve 'error' eventleri, bağlantıların düzgün kapanmasını ve hataların yönetilmesini sağlar; bu, bellek sızıntılarını önler ve uygulamanın stabil çalışmasını garanti eder. Node.js’in olay tabanlı yapısı sayesinde birden fazla istemci eş zamanlı olarak sunucuya bağlanabilir. Bu örnek, WebSocket temel kavramlarını, bağlantı yönetimini ve hata kontrolünü uygulamalı olarak gösterir.
Pratik Örnek
textconst WebSocket = require('ws');
class ChatServer {
constructor(port) {
this.wss = new WebSocket.Server({ port });
this.clients = new Set();
this.init();
}
init() {
this.wss.on('connection', (socket) => {
this.clients.add(socket);
console.log('İstemci bağlandı. Toplam istemci sayısı:', this.clients.size);
socket.on('message', (msg) => this.broadcast(msg, socket));
socket.on('close', () => this.clients.delete(socket));
socket.on('error', (err) => console.error('Bağlantı hatası:', err));
});
}
broadcast(message, sender) {
for (const client of this.clients) {
if (client !== sender && client.readyState === WebSocket.OPEN) {
client.send(`Diğer istemciden mesaj: ${message}`);
}
}
}
}
const server = new ChatServer(8080);
console.log('WebSocket chat sunucusu 8080 portunda başlatıldı');
Bu ileri düzey örnek, birden fazla istemciyi destekleyen bir chat sunucusunu göstermektedir. ChatServer sınıfı, WebSocket sunucusunu kapsüller ve Set veri yapısı ile istemcileri yönetir, böylece tekrarlayan istemci kayıtlarını önler.
broadcast metodu yalnızca aktif bağlantılara mesaj gönderir, bu sayede performans optimize edilir ve hatalar önlenir. Bu örnek, Node.js’de OOP, veri yapıları, asenkron programlama ve mesaj yönlendirme algoritmalarını gerçek dünya uygulamasında göstermektedir. Hata yönetimi ve kaynak optimizasyonu için en iyi uygulamalar da uygulanmıştır.
Node.js’de WebSocket için en iyi uygulamalar ve yaygın hatalar:
- Güvenilir kütüphaneler kullanın: 'ws' veya 'socket.io'.
- Mesaj göndermeden önce bağlantının durumunu kontrol edin.
- Çoklu istemci yönetimi için Set veya Map kullanın.
- Tüm eventleri yönetin: 'message', 'close', 'error'.
- Mesaj akışını optimize edin: sıkıştırma, limitler ve deduplifikasyon.
- WSS kullanarak güvenliği sağlayın ve veri doğrulaması yapın.
- İletişim mantığını iş mantığından ayırın, kodun sürdürülebilirliğini artırın.
Hata ayıklama için event listener’ları, bağlantı durumunu, hata yığınlarını ve bellek kullanımını izlemek önemlidir. Bu yöntemler, WebSocket sunucusunun kararlı ve verimli çalışmasını garanti eder.
📊 Referans Tablosu
Node.js Element/Concept | Description | Usage Example |
---|---|---|
WebSocket.Server | WebSocket sunucusu oluşturur | const server = new WebSocket.Server({ port: 8080 }); |
connection event | Yeni istemcileri yönetir | server.on('connection', (socket) => {...}); |
message event | İstemciden mesaj alır | socket.on('message', (msg) => {...}); |
broadcast | Mesajları tüm istemcilere gönderir | clients.forEach(c => c.send(msg)); |
error handling | Bağlantı hatalarını yönetir | socket.on('error', (err) => console.error(err)); |
WebSocket kullanarak Node.js’de gerçek zamanlı uygulamalar geliştirmek, veri akışını yönetmeyi ve bağlantı yaşam döngüsünü kontrol etmeyi öğrenmek, yazılım geliştirme becerilerinizi önemli ölçüde artırır. Sonraki adım olarak Socket.io, performans optimizasyonu, güvenlik ve kümeleme konularını incelemek, gerçek dünya uygulamalarında bu bilgileri pekiştirmenizi sağlayacaktır. Projeler üzerinde çalışmak, öğrendiklerinizi pekiştirmenin ve Node.js’de uzmanlaşmanın en etkili yoludur.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek