Socket.io: Anlık (Real-time) Chat Uygulaması Yapımı

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

1. WebSockets vs. HTTP​


Geleneksel HTTP bağlantılarında, sunucu size sadece siz bir şey istediğinizde cevap verebilir. WebSocket protokolü ise bir kez el sıkışma (handshake) yaptıktan sonra bağlantıyı açık tutar. Sunucu, kullanıcıdan istek gelmesini beklemeden veri gönderebilir (Push). Socket.io, WebSockets üzerine kurulmuş, bağlantı kopsa bile otomatik tekrar bağlanan ve kullanımı çok daha kolay olan bir kütüphanedir.

2. Sunucu Tarafı (Server-Side) Kurulumu​


Socket.io hem sunucuda hem de istemcide çalışan iki parçadan oluşur. Önce Node.js tarafında Express ile birlikte kuralım:

Bash:
npm install express socket.io

JavaScript:
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server); // Socket.io'yu HTTP sunucusuna bağlıyoruz

io.on('connection', (socket) => {
console.log('Bir kullanıcı bağlandı: ' + socket.id);

// Bir mesaj geldiğinde yakala
socket.on('mesaj_gonder', (data) => {
    // Bu mesajı bağlı olan HERKESE yay (broadcast)
    io.emit('mesaj_al', data);
});

socket.on('disconnect', () => {
    console.log('Kullanıcı ayrıldı.');
});

});

server.listen(3000, () => console.log('3000 portunda chat başladı!'));

3. İstemci Tarafı (Client-Side) Kurulumu​


Frontend kısmında, sunucuya bağlanmak ve mesajları dinlemek oldukça basittir:

HTML:
<script src="/socket.io/socket.io.js"></script>

<script>
const socket = io(); // Sunucuya bağlan

function mesajGonder() {
    const mesaj = document.getElementById(&#39;input&#39;).value;
    socket.emit(&#39;mesaj_gonder&#39;, { metin: mesaj, kullanici: &#39;Can&#39; });
}

// Sunucudan gelen mesajları dinle
socket.on(&#39;mesaj_al&#39;, (data) =&gt; {
    const liste = document.getElementById(&#39;mesajlar&#39;);
    const eleman = document.createElement(&#39;li&#39;);
    eleman.textContent = `${data.kullanici}: ${data.metin}`;
    liste.appendChild(eleman);
});

</script>

4. Olaylar (Events) ve Odalar (Rooms)​


Socket.io'nun en büyük gücü, verileri gruplandırabilmesidir:


  • []emit: Mesaj gönderir.
    []on: Gelen mesajı dinler.
    []broadcast.emit: Mesajı gönderen kişi hariç herkese gönderir.
    []join/leave: Kullanıcıları "Odalar"a (örn: 'Oyun-1' odası) ayırarak sadece o gruptakilerin mesajlaşmasını sağlar.

JavaScript:
// Özel odaya katılma örneği
socket.join('yazilim-odasi');
io.to('yazilim-odasi').emit('duyuru', 'Yazılımcılar buraya!');

5. Socket.io'nun Avantajları​


ÖzellikAçıklama
Otomatik Yeniden Bağlanmaİnternet kopsa bile bağlantı geldiği an kaldığı yerden devam eder.
Binary DesteğiSadece metin değil, resim ve dosya transferi de yapılabilir.
FallbackTarayıcı WebSocket desteklemiyorsa otomatik olarak "polling" moduna geçer.



Sonuç

Socket.io, web uygulamalarına "canlılık" katan teknolojidir. Artık kullanıcılarınızın sayfayı yenilemesini beklemenize gerek yok. Sohbet uygulamalarından, ortak çalışma araçlarına (Google Docs gibi) kadar her türlü interaktif projede Socket.io sizin en yakın dostunuzdur.
 
Geri
Üst