WebSocket, bir istemci ve sunucu arasında tek bir TCP bağlantısı üzerinden tam çift yönlü, iki yönlü iletişimi sağlayan bir protokoldür. Sohbet sistemleri, canlı güncellemeler ve oyun gibi gerçek zamanlı, olay tabanlı uygulamalar için tasarlanmıştır.
WebSocket bağlantısı, bir HTTP yükseltme isteği ile başlar:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Sunucu yanıtı:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
ws://
veya wss://
(güvenli WebSocket için) URL şemasını kullanırWebSocket API'si, WebSocket bağlantılarını oluşturmak ve yönetmek için basit bir arayüz sağlar.
const socket = new WebSocket('ws://example.com/socketserver');
Node.js ve ws
kütüphanesi kullanarak örnek:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('alındı: %s', message);
});
ws.send('WebSocket sunucusuna hoş geldiniz!');
});
const socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('open', function (event) {
socket.send('Merhaba Sunucu!');
});
socket.addEventListener('message', function (event) {
console.log('Sunucudan gelen mesaj:', event.data);
});
open
: Bağlantı kurulduğunda tetiklenirmessage
: Veri alındığında tetiklenirerror
: Bir hata oluştuğunda tetiklenirclose
: Bağlantı kapatıldığında tetiklenirsocket.addEventListener('open', (event) => {
console.log('WebSocket bağlantısı açıldı');
});
socket.addEventListener('message', (event) => {
console.log('Alınan mesaj:', event.data);
});
socket.addEventListener('error', (event) => {
console.error('WebSocket hatası:', event);
});
socket.addEventListener('close', (event) => {
console.log('WebSocket bağlantısı kapandı');
});
send()
: WebSocket bağlantısı üzerinden veri gönderirclose()
: WebSocket bağlantısını kapatır// Veri gönderme
socket.send('Merhaba, sunucu!');
// Bağlantıyı kapatma
socket.close();
readyState
özelliği, WebSocket bağlantısının durumunu gösterir:
WebSocket.CONNECTING
(0): Bağlantı henüz açık değilWebSocket.OPEN
(1): Bağlantı açık ve iletişime hazırWebSocket.CLOSING
(2): Bağlantı kapatılma sürecindeWebSocket.CLOSED
(3): Bağlantı kapalı veya açılamadıif (socket.readyState === WebSocket.OPEN) {
socket.send('Veri');
}
socket.addEventListener('error', (error) => {
console.error('WebSocket Hatası:', error);
});
// Belirli hataları işleme
socket.addEventListener('close', (event) => {
if (event.code === 1006) {
console.error('Bağlantı anormal şekilde kapandı');
}
});
const socket = new WebSocket('wss://secure.example.com');
Örnek kalp atışı uygulaması:
// İstemci tarafı
function heartbeat() {
if (socket.readyState === WebSocket.OPEN) {
socket.send('__ping__');
setTimeout(heartbeat, 30000);
}
}
socket.addEventListener('open', heartbeat);
socket.addEventListener('message', (event) => {
if (event.data === '__pong__') {
console.log('Pong alındı');
} else {
console.log('Alındı:', event.data);
}
});
// Sunucu tarafı
wss.on('connection', (ws) => {
ws.isAlive = true;
ws.on('pong', () => {
ws.isAlive = true;
});
ws.on('message', (message) => {
if (message === '__ping__') {
ws.send('__pong__');
}
});
});
setInterval(() => {
wss.clients.forEach((ws) => {
if (!ws.isAlive) return ws.terminate();
ws.isAlive = false;
ws.ping();
});
}, 30000);
2024 © Tüm hakları saklıdır - buraxta.com