Junior
Veb-soketlər nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Websockets (Websockets) — bu, TCP bağlantısı vasitəsilə ikitərəfli əlaqə protokoludur və brauzer ilə server arasında real vaxt rejimində məlumat mübadiləsinə imkan verir.
Ənənəvi HTTP sorğularından əsas fərqlər:
- İkitərəfli əlaqə: Server, müştəridən əvvəlcədən sorğu almadan məlumat göndərə bilər.
- Yalnız bir əlaqə: Uzunmüddətli əlaqə qurulur, bu da hər məlumat mübadiləsi üçün yeni əlaqənin qurulması xərclərini aradan qaldırır (HTTP kimi).
- Gecikmənin azaldılması: Əlaqənin qurulması, başlıqların dəyişdirilməsi və qısa sorğu/cavabların işlənməsi üçün daha az vaxt sərf olunur.
İş prinsipi:
- Handshake: Brauzer xüsusi HTTP sorğusu göndərir (
Upgrade: websocketvəConnection: Upgradebaşlıqları ilə). - Əlaqənin qurulması: Əgər server websocketləri dəstəkləyirsə,
101 Switching Protocolskodu ilə cavab verir və əlaqə websocket protokolünə keçir. - Məlumatların ötürülməsi: Əlaqə qurulduqdan sonra, hər iki tərəf istənilən vaxt mesajlar mübadiləsi edə bilər.
İstifadə nümunələri:
- Onlayn oyunlar
- Çat və mesajlaşma
- Məlumatların real vaxt yeniləmələri (kurslar, xəbərlər)
- Əməkdaşlıq alətləri
Üstünlüklər:
- Aşağı gecikmə
- Resursların səmərəli istifadəsi (daha az overhead)
- Real vaxtda ikitərəfli əlaqə
Çatışmazlıqlar:
- Həm müştəri (brauzer), həm də server tərəfi dəstək tələb edir.
- Sadə HTTP sorğularına nisbətən daha mürəkkəb tətbiq.
JavaScript-də müştəri kodu nümunəsi:
// websocket yaradılması
const socket = new WebSocket('wss://example.com/websocket');
// əlaqənin açılması üçün handler
socket.onopen = function(event) {
console.log('Əlaqə quruldu');
socket.send('Salam, server!'); // serverə mesaj göndərmək
};
// mesajların alınması üçün handler
socket.onmessage = function(event) {
console.log('Serverdən alınan mesaj: ' + event.data);
};
// əlaqənin bağlanması üçün handler
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Təmiz şəkildə bağlandı, kod=${event.code} səbəb=${event.reason}`);
} else {
console.log('Əlaqə kəsildi'); // məsələn, şəbəkə nasazlığı səbəbindən
}
};
// xəta üçün handler
socket.onerror = function(error) {
console.error(`Websocket xətası: ${error}`);
};
// əlaqəni bağlamaq (lazım olarsa)
// socket.close();