- 23 Kasım 2025
- 982
- 57
---
**2) Makale Metni**
## Node.js ile WebSocket Tabanlı Canlı Sohbet Sistemlerinin Kod Örneği
Günümüz dijital dünyasında gerçek zamanlı iletişim, web uygulamalarının olmazsa olmazıdır. Kullanıcıların anında mesajlaşabildiği, etkileşimde bulunabildiği canlı sohbet sistemleri, bu ihtiyacın en temel örneklerinden biridir. Geleneksel HTTP istek-yanıt döngülerinin getirdiği gecikmeler ve verimsizlikler, özellikle gerçek zamanlı senaryolarda yetersiz kalır. Bu noktada Node.js'in asenkron yapısı ve WebSocket protokolünün çift yönlü, sürekli bağlantı özelliği devreye girer. Birbirini tamamlayan bu iki teknoloji, yüksek performanslı ve akıcı canlı sohbet uygulamaları geliştirmek için ideal bir zemin sunar. Bir kod örneği üzerinden bu mimariyi ve uygulama adımlarını keşfetmek, geliştiricilere sağlam bir başlangıç noktası sağlayacaktır.
### Node.js ve WebSocket'e Giriş
Node.js, sunucu tarafında JavaScript çalıştırmaya olanak tanıyan, olay tabanlı, asenkron bir çalışma ortamıdır. Bu özellikleri sayesinde I/O yoğun uygulamalar ve gerçek zamanlı sistemler için mükemmel bir seçenektir. WebSocket ise, sunucu ile istemci arasında kalıcı bir bağlantı kurarak çift yönlü tam çift yönlü iletişim sağlayan bir protokoldür. HTTP gibi istek-yanıt modeline takılı kalmadan, her iki taraf da istediği zaman veri gönderebilir. Örneğin, bir kullanıcı mesaj gönderdiğinde, bu mesajın anında diğer tüm kullanıcılara iletilmesi, WebSocket'in sağladığı sürekli bağlantı sayesinde mümkün olur. Bu nedenle, canlı sohbet gibi anlık etkileşim gerektiren uygulamalar için en verimli çözümdür.
### Proje Ortamının Hazırlanması
Canlı sohbet sistemimizi geliştirmeye başlamadan önce bir Node.js projesi oluşturmamız gerekir. İlk olarak, projemiz için bir klasör oluşturup terminalde bu klasöre girmeli ve `npm init -y` komutunu çalıştırarak yeni bir `package.json` dosyası oluşturmalıyız. Bu dosya, projemizin temel bilgilerini ve bağımlılıklarını yönetecek. Daha sonra, WebSocket sunucusu oluşturmak için gerekli olan `ws` kütüphanesini kurmalıyız. `npm install ws` komutunu kullanarak `ws` paketini projemize dahil edebiliriz. Ek olarak, `index.js` adında ana sunucu dosyamızı ve istemci tarafı için `index.html` gibi dosyaları oluşturarak projemizin temel yapısını kurmuş oluruz. Bu adımlar, geliştirme sürecimiz için sağlam bir zemin hazırlar.
### WebSocket Sunucusunu Oluşturma
WebSocket sunucumuzu oluşturmak için `ws` kütüphanesini kullanırız. Öncelikle `ws` modülünden `WebSocket.Server` sınıfını içe aktarmalıyız. Ardından, yeni bir `WebSocket.Server` örneği oluşturarak belirli bir port üzerinde dinlemeye başlarız. Örneğin, `const wss = new WebSocket.Server({ port: 8080 });` şeklinde bir tanımlama ile sunucumuzu 8080 portunda çalıştırabiliriz. Sunucumuz başarıyla başlatıldığında, istemcilerin bağlantı kurmasını bekleyecektir. Bir istemci sunucuya bağlandığında, `connection` olayı tetiklenir ve bu olay dinleyicisi içinde yeni bağlanan istemciyi temsil eden bir `ws` nesnesi elde ederiz. Başka bir deyişle, bu adım, canlı sohbet sistemimizin iletişim omurgasını oluşturan temel bileşendir.
### İstemci Bağlantılarını Yönetme
Bir WebSocket sunucusunun temel görevlerinden biri, bağlı olan tüm istemcileri etkin bir şekilde yönetmektir. Her yeni bağlantı kurulduğunda, bu istemciyi bir dizi veya harita gibi bir veri yapısında saklamak önemlidir. Örneğin, `const clients = new Set();` gibi bir `Set` kullanarak her bağlı istemciyi tutabiliriz. Böylece, bir istemciye özel veya tüm istemcilere genel mesajlar göndermek gerektiğinde bu listeyi kullanabiliriz. Ek olarak, istemci bağlantılarının kesilmesi durumunu da ele almalıyız. `ws.on('close', ...)` ve `ws.on('error', ...)` olay dinleyicileri ile bir istemci ayrıldığında veya bir hata oluştuğunda ilgili istemciyi `clients` listemizden çıkarmalıyız. Bu yönetim, sistemin istikrarlı ve doğru çalışmasını sağlar.
### Mesajlaşma Mantığını Geliştirme
Canlı sohbet sistemimizin kalbi, mesajlaşma mantığında yatar. Bir istemci mesaj gönderdiğinde, `ws` nesnesi üzerinde `message` olayı tetiklenir. Bu olayı yakalayarak gelen mesajı işleyebiliriz. Mesajlar genellikle JSON formatında gönderilir; bu nedenle, gelen veriyi `JSON.parse()` kullanarak ayrıştırmak, içeriğe erişmemizi sağlar. Örneğin, bir mesajın `text` ve `username` alanları olabilir. Mesajı aldıktan sonra, bu mesajı diğer tüm bağlı istemcilere yayınlamamız gerekir. `clients.forEach(client => { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(message.toString()); } });` döngüsü ile mesajı, gönderen hariç diğer tüm açık bağlantılara gönderebiliriz. Bu yöntem, gerçek zamanlı sohbet akışını mümkün kılar.
### İstemci Tarafı Uygulaması (HTML ve JavaScript)
Sohbet sistemimizin kullanıcılarla etkileşime gireceği kısım istemci tarafıdır. Basit bir HTML dosyası, mesajların görüntüleneceği bir alan (`div` veya `ul`) ve kullanıcıların mesaj yazıp göndereceği bir giriş kutusu (`input`) ile bir gönder düğmesi (`button`) içermelidir. JavaScript kullanarak tarayıcıdan WebSocket sunucusuna bağlanırız. `const socket = new WebSocket('ws://localhost:8080');` satırı ile sunucumuza bir bağlantı açabiliriz. Bağlantı kurulduğunda `socket.onopen`, mesaj alındığında `socket.onmessage` ve hata oluştuğunda `socket.onerror` olayları tetiklenir. Kullanıcı bir mesaj yazdığında, bu mesajı `socket.send(JSON.stringify({ type: 'message', text: input.value }));` gibi bir kodla sunucuya göndeririz. Gelen mesajları ise HTML içeriğine ekleyerek ekranda gösteririz, böylece kullanıcılar arasındaki anlık iletişimi görselleştiririz.
### Canlı Sohbet Sistemini Test Etme ve Geliştirme
Geliştirdiğimiz canlı sohbet sistemini test etmek için hem Node.js sunucumuzu hem de HTML istemci dosyamızı çalıştırmamız gerekir. Terminalde `node index.js` komutuyla sunucumuzu başlatabiliriz. Ardından, `index.html` dosyamızı bir web tarayıcısında açarak istemci arayüzüne erişebiliriz. Birden fazla tarayıcı penceresi veya sekme açarak farklı kullanıcılar gibi davranabilir ve mesajlaşma işlevselliğini test edebiliriz. Sonuç olarak, gönderilen mesajların anında diğer tarayıcılarda görünmesi, sistemin başarılı bir şekilde çalıştığını gösterir. Ek olarak, bu temel yapı üzerine kullanıcı adları, mesaj geçmişi, özel mesajlaşma, hatta bir veritabanı entegrasyonu gibi özellikler ekleyerek sistemi daha da geliştirebiliriz. Bu test ve geliştirme adımları, uygulamanın sağlamlığını ve kullanışlılığını artırır.
**2) Makale Metni**
## Node.js ile WebSocket Tabanlı Canlı Sohbet Sistemlerinin Kod Örneği
Günümüz dijital dünyasında gerçek zamanlı iletişim, web uygulamalarının olmazsa olmazıdır. Kullanıcıların anında mesajlaşabildiği, etkileşimde bulunabildiği canlı sohbet sistemleri, bu ihtiyacın en temel örneklerinden biridir. Geleneksel HTTP istek-yanıt döngülerinin getirdiği gecikmeler ve verimsizlikler, özellikle gerçek zamanlı senaryolarda yetersiz kalır. Bu noktada Node.js'in asenkron yapısı ve WebSocket protokolünün çift yönlü, sürekli bağlantı özelliği devreye girer. Birbirini tamamlayan bu iki teknoloji, yüksek performanslı ve akıcı canlı sohbet uygulamaları geliştirmek için ideal bir zemin sunar. Bir kod örneği üzerinden bu mimariyi ve uygulama adımlarını keşfetmek, geliştiricilere sağlam bir başlangıç noktası sağlayacaktır.
### Node.js ve WebSocket'e Giriş
Node.js, sunucu tarafında JavaScript çalıştırmaya olanak tanıyan, olay tabanlı, asenkron bir çalışma ortamıdır. Bu özellikleri sayesinde I/O yoğun uygulamalar ve gerçek zamanlı sistemler için mükemmel bir seçenektir. WebSocket ise, sunucu ile istemci arasında kalıcı bir bağlantı kurarak çift yönlü tam çift yönlü iletişim sağlayan bir protokoldür. HTTP gibi istek-yanıt modeline takılı kalmadan, her iki taraf da istediği zaman veri gönderebilir. Örneğin, bir kullanıcı mesaj gönderdiğinde, bu mesajın anında diğer tüm kullanıcılara iletilmesi, WebSocket'in sağladığı sürekli bağlantı sayesinde mümkün olur. Bu nedenle, canlı sohbet gibi anlık etkileşim gerektiren uygulamalar için en verimli çözümdür.
### Proje Ortamının Hazırlanması
Canlı sohbet sistemimizi geliştirmeye başlamadan önce bir Node.js projesi oluşturmamız gerekir. İlk olarak, projemiz için bir klasör oluşturup terminalde bu klasöre girmeli ve `npm init -y` komutunu çalıştırarak yeni bir `package.json` dosyası oluşturmalıyız. Bu dosya, projemizin temel bilgilerini ve bağımlılıklarını yönetecek. Daha sonra, WebSocket sunucusu oluşturmak için gerekli olan `ws` kütüphanesini kurmalıyız. `npm install ws` komutunu kullanarak `ws` paketini projemize dahil edebiliriz. Ek olarak, `index.js` adında ana sunucu dosyamızı ve istemci tarafı için `index.html` gibi dosyaları oluşturarak projemizin temel yapısını kurmuş oluruz. Bu adımlar, geliştirme sürecimiz için sağlam bir zemin hazırlar.
### WebSocket Sunucusunu Oluşturma
WebSocket sunucumuzu oluşturmak için `ws` kütüphanesini kullanırız. Öncelikle `ws` modülünden `WebSocket.Server` sınıfını içe aktarmalıyız. Ardından, yeni bir `WebSocket.Server` örneği oluşturarak belirli bir port üzerinde dinlemeye başlarız. Örneğin, `const wss = new WebSocket.Server({ port: 8080 });` şeklinde bir tanımlama ile sunucumuzu 8080 portunda çalıştırabiliriz. Sunucumuz başarıyla başlatıldığında, istemcilerin bağlantı kurmasını bekleyecektir. Bir istemci sunucuya bağlandığında, `connection` olayı tetiklenir ve bu olay dinleyicisi içinde yeni bağlanan istemciyi temsil eden bir `ws` nesnesi elde ederiz. Başka bir deyişle, bu adım, canlı sohbet sistemimizin iletişim omurgasını oluşturan temel bileşendir.
### İstemci Bağlantılarını Yönetme
Bir WebSocket sunucusunun temel görevlerinden biri, bağlı olan tüm istemcileri etkin bir şekilde yönetmektir. Her yeni bağlantı kurulduğunda, bu istemciyi bir dizi veya harita gibi bir veri yapısında saklamak önemlidir. Örneğin, `const clients = new Set();` gibi bir `Set` kullanarak her bağlı istemciyi tutabiliriz. Böylece, bir istemciye özel veya tüm istemcilere genel mesajlar göndermek gerektiğinde bu listeyi kullanabiliriz. Ek olarak, istemci bağlantılarının kesilmesi durumunu da ele almalıyız. `ws.on('close', ...)` ve `ws.on('error', ...)` olay dinleyicileri ile bir istemci ayrıldığında veya bir hata oluştuğunda ilgili istemciyi `clients` listemizden çıkarmalıyız. Bu yönetim, sistemin istikrarlı ve doğru çalışmasını sağlar.
### Mesajlaşma Mantığını Geliştirme
Canlı sohbet sistemimizin kalbi, mesajlaşma mantığında yatar. Bir istemci mesaj gönderdiğinde, `ws` nesnesi üzerinde `message` olayı tetiklenir. Bu olayı yakalayarak gelen mesajı işleyebiliriz. Mesajlar genellikle JSON formatında gönderilir; bu nedenle, gelen veriyi `JSON.parse()` kullanarak ayrıştırmak, içeriğe erişmemizi sağlar. Örneğin, bir mesajın `text` ve `username` alanları olabilir. Mesajı aldıktan sonra, bu mesajı diğer tüm bağlı istemcilere yayınlamamız gerekir. `clients.forEach(client => { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(message.toString()); } });` döngüsü ile mesajı, gönderen hariç diğer tüm açık bağlantılara gönderebiliriz. Bu yöntem, gerçek zamanlı sohbet akışını mümkün kılar.
### İstemci Tarafı Uygulaması (HTML ve JavaScript)
Sohbet sistemimizin kullanıcılarla etkileşime gireceği kısım istemci tarafıdır. Basit bir HTML dosyası, mesajların görüntüleneceği bir alan (`div` veya `ul`) ve kullanıcıların mesaj yazıp göndereceği bir giriş kutusu (`input`) ile bir gönder düğmesi (`button`) içermelidir. JavaScript kullanarak tarayıcıdan WebSocket sunucusuna bağlanırız. `const socket = new WebSocket('ws://localhost:8080');` satırı ile sunucumuza bir bağlantı açabiliriz. Bağlantı kurulduğunda `socket.onopen`, mesaj alındığında `socket.onmessage` ve hata oluştuğunda `socket.onerror` olayları tetiklenir. Kullanıcı bir mesaj yazdığında, bu mesajı `socket.send(JSON.stringify({ type: 'message', text: input.value }));` gibi bir kodla sunucuya göndeririz. Gelen mesajları ise HTML içeriğine ekleyerek ekranda gösteririz, böylece kullanıcılar arasındaki anlık iletişimi görselleştiririz.
### Canlı Sohbet Sistemini Test Etme ve Geliştirme
Geliştirdiğimiz canlı sohbet sistemini test etmek için hem Node.js sunucumuzu hem de HTML istemci dosyamızı çalıştırmamız gerekir. Terminalde `node index.js` komutuyla sunucumuzu başlatabiliriz. Ardından, `index.html` dosyamızı bir web tarayıcısında açarak istemci arayüzüne erişebiliriz. Birden fazla tarayıcı penceresi veya sekme açarak farklı kullanıcılar gibi davranabilir ve mesajlaşma işlevselliğini test edebiliriz. Sonuç olarak, gönderilen mesajların anında diğer tarayıcılarda görünmesi, sistemin başarılı bir şekilde çalıştığını gösterir. Ek olarak, bu temel yapı üzerine kullanıcı adları, mesaj geçmişi, özel mesajlaşma, hatta bir veritabanı entegrasyonu gibi özellikler ekleyerek sistemi daha da geliştirebiliriz. Bu test ve geliştirme adımları, uygulamanın sağlamlığını ve kullanışlılığını artırır.
