WebSocket — müştəri və server arasında real vaxt rejimində məlumat mübadiləsi üçün daimi əlaqə təmin edən tamdupleks rabitə protokoludur. Ənənəvi HTTP sorğularından fərqli olaraq, bu protokol tək bir əlaqə qurur və onu təkrar handshake etmədən ikitərəfli ötürmə üçün istifadə edir. Mozilla Developer Network (2025) məlumatlarına görə, WebSocket real-time tətbiqlərdə HTTP polling ilə müqayisədə gecikmələri 50% azaldır.
Əsas məqamlar
WebSocket — TCP üzərində işləyən və müştəri ilə server arasında tamdupleks kanal təmin edən rabitə protokoludur. 2011-ci ildə IETF tərəfindən RFC 6455 olaraq standartlaşdırılıb və bütün müasir brauzerlər, mobil platformalar və server freymvorkları tərəfindən dəstəklənir.
HTTP-dən fərqli olaraq, burada müştəri sorğu göndərir və cavab alır, WebSocket isə hər iki tərəfə əlaqə qurulduqdan sonra istənilən vaxt mesaj göndərməyə imkan verir. Bu, ani çatdırılma tələb edən ssenarilər üçün idealdır: söhbətlər, bildirişlər, birgə sənəd redaktəsi.
WebSocket protokolu ilkin handshake üçün HTTP portu 80 və ya HTTPS portu 443-dən istifadə edir, sonra öz protokoluna keçir — minimal başlıqla, cəmi 2 bayt, HTTP-dəki 800+ bayt əvəzinə. Bu xüsusiyyət çox sayda mesajda əhəmiyyətli performans qazancı verir.
WebSocket əlaqəsi HTTP Upgrade sorğusu ilə başlayır, sonra protokol ikili çərçivə formatına keçir. Çərçivənin ölçüsü 2 baytdan 2^63 bayta qədər dəyişir, bu da həm qısa mətn mesajlarını, həm də böyük ikili məlumatları ötürməyə imkan verir. Mesajların fraqmentasiyası, müştəridən serverə məlumat maskalanması və əlaqəni qorumaq üçün ping/pong dəstəklənir.
WebSocket əlaqəsinin qurulması prosesi iki mərhələdən ibarətdir: handshake və məlumat ötürülməsi. Handshake mərhələsində müştəri Upgrade: websocket başlığı ilə HTTP sorğusu göndərir, server isə 101 Switching Protocols statusu ilə protokol dəyişikliyini təsdiqləyir. Bundan sonra əlaqə tamdupleks ötürmə rejiminə keçir.
WebSocket-də hər mesaj çərçivələrə bölünür. Çərçivə opcode (mətn, ikili məlumat, bağlanma, ping/pong), yük uzunluğu və müştəri məlumatları üçün maskalama açarı ehtiva edir. Çərçivə fraqmentləşdirilə bilər — nəzarət çərçivələri (ping/pong) mesaj fraqmentləri arasında ötürülə bilər ki, bu da uzun ötürmə zamanı əlaqənin qırılmasının qarşısını alır.
const ws = new WebSocket('wss://example.com/chat')
ws.addEventListener('open', () => {
console.log('Əlaqə quruldu')
ws.send('Salam, server!')
})
ws.addEventListener('message', (event) => {
console.log('Alındı:', event.data)
})
ws.addEventListener('close', () => {
console.log('Əlaqə bağlandı')
})
Yuxarıdakı nümunədə müştəri WebSocket obyekti yaradır, qorunan wss:// URL-ni göstərir. Əlaqə açıldıqdan sonra salam mesajı göndərilir, message işləyicisi isə serverdən cavabları qəbul edir. Bağlanma zamanı close işləyicisi işə düşür — bu, şəbəkə qırılmasında yenidən qoşulma üçün vacibdir.
WebSocket və HTTP arasındakı əsas fərq qarşılıqlı əlaqə modelindədir. HTTP sorğu-cavab sxemi ilə işləyir: müştəri sorğu göndərir, server cavab qaytarır, əlaqə bağlanır. WebSocket isə hər iki tərəfin istənilən vaxt ötürməyə başlaya biləcəyi daimi kanal qurur.
Aşağı gecikmə və daimi məlumat axını tələb edən tətbiqlər üçün WebSocket daha səmərəlidir. HTTP Long Polling — server məlumat görünənə qədər sorğunu açıq saxlayan alternativ — serverə əlavə yük yaradır və çoxsaylı eyni vaxtlı əlaqələr səbəbindən yaddaş istehlakını artırır.
| Parametr | WebSocket | HTTP |
|---|---|---|
| Model | Tamdupleks | Sorğu-cavab |
| Başlıq | 2–14 bayt | 400–800 bayt |
| Daimi əlaqə | Bəli, bir | Xeyr, hər sorğu üçün yeni |
| Gecikmə | Aşağı (1–5 ms) | Yüksək (50–200 ms) |
| Protokol | ws:// və ya wss:// | http:// və ya https:// |
High Performance Browser Networking (Grigorik, O’Reilly) məlumatlarına görə, WebSocket real-time ssenarilərdə şəbəkə gecikmələrini HTTP Long Polling ilə müqayisədə 40–60% azaldır, server yükü isə təkrar handshake-lərin aradan qaldırılması sayəsində 3–5 dəfə azalır.
Aşağı gecikmə və ikitərəfli rabitə sayəsində WebSocket geniş tətbiq spektrində istifadə olunur. Əsas ssenarilərə ani mesajlaşma, oyunlarda vəziyyət sinxronizasiyası və maliyyə sistemlərində bazar məlumatlarının ötürülməsi daxildir.
WebSocket söhbət tətbiqləri üçün de-fakto standarta çevrilib. Slack, Telegram Web və WhatsApp Web kimi platformalar mesajların ani çatdırılması üçün WebSocket-dən istifadə edir. Protokol həm mətn mesajlarını, həm də faylları vahid kanal vasitəsilə göndərməyə imkan verir, ping/pong mexanizmi isə əlaqəni aktiv saxlayır.
Çoxoyunçulu brauzer və mobil oyunlar oyunçu vəziyyətinin sinxronizasiyası üçün minimal gecikmə tələb edir. WebSocket koordinatları, hərəkətləri və hadisələri HTTP sorğu gecikmələri olmadan real vaxtda ötürür. Socket.IO və Colyseus kimi freymvorklar protokolla aşağısəviyyəli işi abstraksiya edərək avtomatik yenidən qoşulma və otaqlar əlavə edir.
Birja terminalları və treyder platformaları real vaxtda kotirovkaları almaq üçün WebSocket-dən istifadə edir. Bir neçə millisaniyəlik gecikmə milyonlarla dollara başa gələ bilər, buna görə də maliyyə API-ləri — məsələn, Binance WebSocket Streams, Coinbase Pro — bazar məlumatları üçün məhz WebSocket interfeysləri təqdim edir.
Mobil inkişafda WebSocket yerli API-lər vasitəsilə istifadə olunur: iOS-da URLSessionWebSocketTask və Android-də OkHttp WebSocket. Flutter üçün web_socket_channel kitabxanası, React Native üçün isə react-native-websocket mövcuddur. IoT cihazları telemetriya ötürmək və idarəetmə əmrləri almaq üçün WebSocket tətbiq edir, çünki protokol daimi HTTP-polling-dən daha az enerji sərf edir.
Node.js-də ws kitabxanası ilə server hissəsinin nümunəsini nəzərdən keçirək — bu, JavaScript üçün WebSocket-in ən populyar tətbiqidir. Server qoşulmaları qəbul edir, mesajları emal edir və onları bütün qoşulmuş müştərilərə yayımlayır.
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })
wss.on('connection', (ws) => {
console.log('Yeni müştəri qoşuldu')
ws.on('message', (data) => {
console.log('Alındı:', data.toString())
ws.send('Server mesajınızı qəbul etdi')
})
ws.on('close', () => {
console.log('Müştəri ayrıldı')
})
})
console.log('WebSocket serveri 8080 portunda işə salındı')
Server 8080 portunda WebSocket.Server nümunəsi yaradır və qoşulmaları gözləyir. Hər yeni müştəriyə ayrıca ws obyekti təyin edilir, server bu obyekt vasitəsilə fərdi mesajlar göndərə bilər. Mesajların bütün müştərilərə yayımlanması qoşulma massivinin kütləvi dövriyyəsi ilə həyata keçirilir. Çox sayda müştəri olduqda (1000-dən çox) Redis vasitəsilə miqyaslanma və avtomatik yenidən qoşulma əlavə edən Socket.IO kimi kitabxanalardan istifadə tövsiyə olunur.
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send('Bütün iştirakçılar üçün mesaj')
}
})
Göndərmədən əvvəl readyState yoxlanışı məcburidir: əgər müştəri artıq ayrılıbsa, send çağırışı xəta verəcək. WebSocket.OPEN bayrağı əlaqənin aktiv olduğunu və mesajın çatdırılacağını təmin edir.
Mobil iOS tətbiqləri üçün WebSocket iOS 13-dən etibarən mövcud olan URLSessionWebSocketTask vasitəsilə tətbiq edilir. Sessiya wss:// protokolu URL-i ilə tapşırıq yaradır, sonra send və receive metodları çağırılır. Mesajların qəbulu əvvəlki mesajı emal etdikdən sonra növbəti mesajı gözləyən davamlı receive rekursiyası vasitəsilə təşkil edilə bilər ki, bu da yenidən qoşulmadan davamlı məlumat qəbulunu təmin edir. Android üçün OkHttp WebSocket istifadə olunur, o, onOpen, onMessage, onClosing və onClosed callback-ləri ilə oxşar interfeys, həmçinin əlaqə qırıldıqda avtomatik yenidən qoşulma təqdim edir.
Mobil tətbiqlərdə WebSocket ilə işləyərkən həyat dövrünün idarə edilməsini nəzərə almaq vacibdir: tətbiq fon rejiminə keçdikdə əlaqə sistem tərəfindən qırıla bilər. iOS-da sceneDidBecomeActive delegatı vasitəsilə ön plana qayıdarkən əlaqəni yenidən qurmaq lazımdır. Android-də əlaqəni saxlamaq üçün Lifecycle-aware komponentləri və ya Service istifadə edilməlidir. Əlavə olaraq, yenidən qoşulma zamanı exponential backoff tətbiq etmək tövsiyə olunur — cəhdlər arası intervalı 1 saniyədən 30 saniyəyə qədər artırmaq, müvəqqəti şəbəkə problemlərində serverə həddindən artıq yük yaratmamaq üçün.
Tez-tez verilən suallar
WebSocket hər iki tərəfin istənilən vaxt məlumat göndərə biləcəyi daimi tamdupleks əlaqə qurur. HTTP sorğu-cavab sxemi ilə işləyir, burada hər mübadilə yeni əlaqə və tam başlıqlar tələb edir. WebSocket tək bir TCP kanalı və cəmi 2–14 bayt başlıq istifadə edir ki, bu da gecikmələri kəskin şəkildə azaldır.
WebSocket qorunmayan əlaqələr (ws://) üçün port 80, qorunan əlaqələr (wss://) üçün port 443 istifadə edir. Bu, əlavə konfiqurasiya olmadan əksər proksi serverlərdən və korporativ firewall-lardan keçməyə imkan verir. Port 443 TLS şifrələməsi səbəbindən production mühitləri üçün tövsiyə olunur.
Bəli, WebSocket bütün mobil platformalarda dəstəklənir. iOS-da yerli URLSessionWebSocketTask sinfi iOS 13-dən mövcuddur. Android-də — OkHttp WebSocket sinfi və standart java.net.WebSocket. React Native üçün react-native-websocket kitabxanası mövcuddur.
WebSocket Secure — TLS üzərində işləyən qorunan protokol versiyasıdır. Bütün məlumatlar HTTPS-də olduğu kimi şifrələnir. WSS production tətbiqləri üçün məcburidir, xüsusən də WebSocket vasitəsilə autentifikasiya tokenləri və ya şəxsi məlumatlar ötürülərkən.
Əsas alternativlər: HTTP Long Polling (server sorğunu açıq saxlayır), Server-Sent Events (serverdən birtərəfli axın) və WebRTC Data Channel (peer-to-peer rabitə). Server-Sent Events tətbiqi daha sadədir, lakin müştəridən serverə göndərməni dəstəkləmir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun