Signaling Server: bu nədir, necə işləyir və harada istifadə olunur

Müəllif: IT Sectr Dərc olunub: 2026-06-02 Oxuma vaxtı: 8 dəq

Signaling Server — WebRTC infrastrukturunun server komponentidir, peer-lər arasında metadata mübadiləsini təmin edərək əlaqənin qurulması və bitirilməsi üçün istifadə olunur. Media trafikindən fərqli olaraq, siqnalizasiya istənilən protokol — WebSocket, HTTP, XMPP və ya SIP ilə ötürülə bilər. MDN Web Docs, 2024-ə görə, siqnalizasiya istənilən WebRTC tətbiqinin məcburi komponentidir, çünki protokol siqnal mesajlarının mübadiləsi üçün konkret üsul müəyyən etmir.

Əsas məqamlar

  • Signaling Server — WebRTC əlaqəsinin iştirakçıları arasında SDP və ICE məlumatlarının mübadiləsini koordinasiya edən vasitəçi server.
  • Funksiya — birbaşa media kanalı qurulana qədər peer-lər arasında session description (offer/answer) və ICE candidates ötürülməsi.
  • Protokol — WebSocket siqnalizasiya üçün ən populyardır, lakin HTTP, XMPP, MQTT və digər nəqliyyat protokolları da mümkündür.
  • Fərq — siqnalizasiya media məlumatlarının ötürülməsində iştirak etmir; əlaqə qurulduqdan sonra peer-lər birbaşa P2P və ya TURN vasitəsilə ünsiyyət qurur.
  • Təhlükəsizlik — siqnalizasiya SDP-nin ələ keçirilməsindən və ICE namizədlərinin dəyişdirilməsindən qorunmaq üçün şifrələnməlidir (TLS).

Signaling Server nədir

Signaling Server — iki və ya daha çox peer arasında WebRTC əlaqəsinin qurulması prosesini koordinasiya edən şəbəkə xidmətidir. O, media məlumatlarını (audio, video, DataChannel kanal məlumatları) ötürmür, yalnız peer-lərin aşkarlanması və əlaqə parametrlərinin razılaşdırılması üçün lazım olan xidməti məlumatları ötürür. P2P kanalı uğurla qurulduqdan sonra Signaling Server artıq lazım olmaya bilər, lakin bəzi arxitekturalarda sonrakı siqnal mübadiləsi üçün qalır (məsələn, zəngin bitirilməsi, iştirakçıların əlavə edilməsi).

Siqnalizasiya arxitekturası üç komponentdən ibarətdir: Signaling Server, Signal Channel (klient və server arasında nəqliyyat protokolu) və klient API (adətən brauzerin WebRTC stekinə daxil edilmişdir). WebRTC spesifikasiyası (W3C, 2024) qəsdən siqnal protokolunu standartlaşdırmır — tərtibatçılar tətbiqləri üçün uyğun olan istənilən nəqliyyatı seçə bilərlər. Bu çevik həll veb tətbiqləri üçün WebSocket, çat sistemləri üçün XMPP və ya telekommunikasiya infrastrukturu ilə inteqrasiya üçün SIP istifadə etməyə imkan verir.

Siqnalizasiya prosesi: yüksək səviyyə

WebRTC əlaqəsi qurulmazdan əvvəl peer-lər üç növ mesaj mübadiləsi etməlidirlər: session description (offer və answer), ICE candidates və sessiyanın bitirilməsi/dəyişdirilməsi haqqında məlumat. Signaling Server bu mesajları peer-lər arasında istiqamətləndirir, ünvanlama üçün otaq və ya istifadəçi identifikatorlarından istifadə edir. Standart nümunə — iki iştirakçının qoşulduğu “otaq” yaradılır və server hər bir iştirakçıdan gələn mesajları yalnız onun həmsöhbətinə ötürür.

WebRTC-də siqnalizasiya necə işləyir

Signaling Server aşağıdakı tipik WebRTC əlaqəsinin qurulması protokolunu həyata keçirir. Peer-lər WebSocket (və ya digər nəqliyyat) vasitəsilə serverə qoşulur və otaqda qeydiyyatdan keçirlər. Peer A (təşəbbüskar) RTCPeerConnection.createOffer() vasitəsilə offer (çıxan media axınının SDP təsviri) yaradır, onu local description olaraq təyin edir və Signaling Server-ə göndərir. Server offer-i peer B-yə ötürür. Peer B offer-i alır, onu remote description olaraq təyin edir, createAnswer() vasitəsilə answer yaradır, onu local description olaraq təyin edir və server vasitəsilə geri göndərir. Bu proses SDP Offer/Answer adlanır.

SDP mübadiləsi ilə paralel olaraq, hər bir peer ICE candidates (host, srflx, relay) toplayır və onları Signaling Server vasitəsilə digər peer-ə göndərir. Uzaqdakı peer alınan namizədləri RTCPeerConnection.addIceCandidate() vasitəsilə əlavə edir. ICE prosesi işləyən yol tapmaq üçün namizədlərin bütün kombinasiyalarını yoxlayır. İşləyən yol tapıldıqdan sonra (adətən 1–5 saniyə ərzində), media trafiki birbaşa peer-lər arasında ötürülməyə başlayır və Signaling Server artıq məlumat ötürülməsində iştirak etmir — onun rolu növbəti xidməti hadisəyə qədər (zəngin bitirilməsi, axın keyfiyyətinin dəyişdirilməsi) başa çatır.

Otaq mexanizmi və qeydiyyat

Mesajların ünvanlanması üçün Signaling Server otaqlar (rooms) və ya kanallar mexanizmindən istifadə edir. Hər yeni WebRTC seansı identifikatorla (adətən UUID) unikal otaq yaradır. Təşəbbüskar otaq yaradır və ikinci peer-in qoşulmasını gözləyir. İkinci peer xarici kanal (məsələn, dəvət linki) vasitəsilə əldə etdiyi ID ilə otağa qoşulur. Server otaqların map-ini saxlayır, burada hər ID-yə qoşulmuş müştərilərin siyahısı uyğun gəlir. İştirakçıların sayı ikiyə çatdıqda, server onlar arasında siqnal mesajlarını ötürməyə başlayır.

WebRTC siqnalizasiya protokolları

Signaling Server müxtəlif nəqliyyat protokollarından istifadə edə bilər, hər birinin öz üstünlükləri və çatışmazlıqları var. Protokolun seçimi tətbiq növündən, infrastruktur məhdudiyyətlərindən və uyğunluq tələblərindən asılıdır. Aşağıda ən geniş yayılmış protokollar və onların xüsusiyyətləri verilmişdir.

ProtokolNəqliyyatÜstünlüklərÇatışmazlıqlar
WebSocketTCPTam dupleks, aşağı gecikmə, brauzerlərə daxildirMiqyaslama mürəkkəbliyi, proksi bloklaması
HTTP/SSETCPİstənilən infrastrukturla uyğunluq, sadə tətbiqYalnız bir istiqamətli (server-klient), Polling tələb olunur
XMPPTCPStandartlaşdırılmış, autentifikasiya dəstəyi, genişləndirilə bilənSadə ssenarilər üçün həddindən artıq, XML yükü
SIPUDP/TCPVoIP və telefon infrastrukturu ilə inteqrasiyaMürəkkəb, brauzerlər üçün qeyri-təbii
MQTTTCPYüngül, IoT mühitlərində işləyir, publish/subscribeBroker tələb olunur, əlavə gecikmə

WebSocket veb tətbiqlərində Signaling Server üçün ən populyar protokoldur. O, SDP və ICE namizədlərinin asinxron mübadiləsi üçün vacib olan tam dupleks əlaqəni təmin edir və bütün müasir brauzerlər tərəfindən WebSocket API vasitəsilə dəstəklənir. WebSocket-in server tətbiqi bütün populyar platformalarda (Node.js, Python, Java, Go) mövcuddur. Milyonlarla istifadəçisi olan tətbiqlər üçün Signaling Server instansiyaları arasında sinxronizasiya üçün Redis Pub/Sub və ya Kafka əsasında miqyaslana bilən WebSocket həlləri istifadə olunur.

Signaling Server tətbiqi nümunəsi

ws (WebSocket) kitabxanası və daxili HTTP serverindən istifadə edərək Node.js-də sadə Signaling Server tətbiqini nəzərdən keçirək. Server istifadəçi qeydiyyatını, otaqların yaradılmasını və iştirakçılar arasında mesajların ötürülməsini dəstəkləyir.

js
const WebSocket = require("ws");
const server = new WebSocket.Server({ port: 8080 });
const rooms = new Map();

server.on("connection", (ws) => {
    ws.roomId = null;

    ws.on("message", (data) => {
        const msg = JSON.parse(data);

        switch (msg.type) {
            case "join":
                handleJoin(ws, msg.roomId);
                break;
            case "offer":
            case "answer":
            case "ice-candidate":
                relayToPeer(ws, msg);
                break;
            case "leave":
                handleLeave(ws);
                break;
        }
    });

    ws.on("close", () => handleLeave(ws));
});

function handleJoin(ws, roomId) {
    if (!rooms.has(roomId)) {
        rooms.set(roomId, []);
    }

    const room = rooms.get(roomId);
    room.push(ws);
    ws.roomId = roomId;

    if (room.length === 2) {
        room[0].send(JSON.stringify({ type: "peer-joined" }));
        room[1].send(JSON.stringify({ type: "peer-joined" }));
    }
}

function relayToPeer(sender, msg) {
    const room = rooms.get(sender.roomId);
    if (!room) return;

    room.forEach(peer => {
        if (peer !== sender && peer.readyState === WebSocket.OPEN) {
            peer.send(JSON.stringify(msg));
        }
    });
}

function handleLeave(ws) {
    if (!ws.roomId) return;
    const room = rooms.get(ws.roomId);
    if (!room) return;

    const idx = room.indexOf(ws);
    if (idx !== -1) room.splice(idx, 1);
    if (room.length === 0) rooms.delete(ws.roomId);
}

Bu Signaling Server əsas funksionallığı həyata keçirir: otağa qoşulma, iki peer arasında WebRTC mesajlarının (offer, answer, ice-candidate) ötürülməsi və qoşulmaların idarə edilməsi. Server qoşulmuş WebSocket müştəriləri ilə otaqları saxlamaq üçün Map-dən istifadə edir. relayToPeer funksiyası göndərəndən başqa otaqdakı bütün iştirakçılara mesaj göndərir. İstehsal mühiti üçün mesaj növlərinin təsdiqi, JSON parsingsəhvlərinin işlənməsi və qırılan əlaqələrin aşkarlanması üçün heartbeat mexanizmi əlavə edilməlidir.

Signaling Server ilə klient inteqrasiyası

Klient tərəfdə Signaling Server brauzerin WebSocket API-si vasitəsilə inteqrasiya olunur. Klient serverə qoşulur, otağa qoşulmaq üçün sorğu göndərir, sonra daxil olan WebRTC mesajlarını emal edərək onları setRemoteDescription()addIceCandidate() vasitəsilə RTCPeerConnection-a ötürür. Klient kodu həmçinin onicecandidate hadisələri və offer/answer yaradıldıqdan sonra RTCPeerConnection-dan alınan öz SDP və ICE namizədlərini serverə göndərir.

Siqnalizasiyada SDP və ICE-nin rolu

Signaling Server iki əsas metadata növünü ötürür: SDP (Session Description Protocol) və ICE candidates. SDP media axınının parametrlərini — kodekləri, seçmə tezliyini, kanalların sayını, ötürmə istiqamətini (sendrecv, sendonly, recvonly, inactive) təsvir edir. ICE candidates peer-in əlaqə üçün əlçatan ola biləcəyi şəbəkə ünvanlarını (lokal, STUN-dan alınmış, TURN-dan relay) ehtiva edir.

SDP sessiyaları və media bölmələrini ehtiva edən mətn formatında təqdim olunur. Sessiya hissəsi ümumi parametrləri (sessiya identifikatoru, versiya, ad) təsvir edir, media bölmələri isə hər bir media axınını (audio, video, DataChannel) onun kodeki, portu və protokolu ilə təsvir edir. ICE namizədləri foundation (qruplaşdırma üçün identifikator), priority, IP ünvanı, port, tip (host, srflx, relay) və protokol (UDP, TCP) ehtiva edir. Hər bir candidate həmçinin onu konkret ICE prosesi ilə əlaqələndirən ufrag (username fragment) atributunu ehtiva edir.

  • SDP Offer — təşəbbüskar öz media imkanlarının təsvirini yaradır və onu Signaling Server vasitəsilə uzaqdakı peer-ə göndərir.
  • SDP Answer — uzaqdakı peer öz təsviri ilə cavab verir, media formatlarını və kodekləri təsdiqləyir və ya düzəldir.
  • ICE Candidate — hər bir peer ICE framework tərəfindən aşkar edildikcə öz şəbəkə namizədlərini siqnal serverinə göndərir.
  • Trickle ICE — müasir optimallaşdırma, burada namizədlər toplama tamamlandıqdan sonra hamısı birdən deyil, aşkar edildikcə bir-bir göndərilir.
  • Re-negotiation — media parametrləri dəyişdikdə (videonun açılması/söndürülməsi, iştirakçının əlavə edilməsi) peer-lər Signaling Server vasitəsilə təkrar SDP mübadiləsinə başlayır.

Trickle ICE WebRTC əlaqəsinin qurulmasını əhəmiyyətli dərəcədə sürətləndirir. Bütün ICE namizədlərinin tam toplanmasını gözləmək əvəzinə (mürəkkəb şəbəkələrdə 2–10 saniyə çəkə bilər), hər bir namizəd aşkar edildikdən dərhal sonra Signaling Server-ə göndərilir. Uzaqdakı peer namizədi alır və dərhal ICE framework vasitəsilə əlaqəni yoxlamağa başlayır. Bu, əksər hallarda əlaqənin qurulma müddətini 500–1500 ms-ə qədər azaldır.

Tez-tez verilən suallar

Sadə sözlə Signaling Server nədir?

Signaling Server — zəngdən əvvəl “koordinator”dur. İki cihaza bir-birini tapmağa və necə ünsiyyət quracaqları barədə razılaşmağa kömək edir. Cihazlar “tanışdıqdan” və razılaşdıqdan sonra server artıq lazım deyil — onlar birbaşa ünsiyyət qururlar.

Niyə WebRTC öz Signaling Server tələb edir?

WebRTC siqnalizasiya protokolunu müəyyən etmir ki, tərtibatçılar ən uyğun nəqliyyatı seçə bilsinlər. Brauzerin digər istifadəçiləri aşkar etmək üçün daxili mexanizmi yoxdur — bu vəzifəni Signaling Server həll edir. O, “poçtalyon” rolunu oynayır, zəng iştirakçıları arasında dəvətləri və əlaqə parametrlərini ötürür.

Signaling Server üçün hansı protokolu seçmək daha yaxşıdır?

WebSocket — əksər veb tətbiqləri üçün optimal seçimdir: tam dupleks, brauzerlər tərəfindən dəstəklənir, tətbiqi sadədir. Mövcud VoIP infrastrukturu ilə inteqrasiya üçün SIP seçin. Geniş funksiyalı çat tətbiqləri üçün — XMPP. IoT ssenariləri üçün — MQTT.

Signaling Server-i necə miqyaslaşdırmaq olar?

Signaling Server-in miqyaslaşdırılması üçün Redis Pub/Sub və ya Kafka vasitəsilə sinxronizasiya ilə üfüqi miqyaslaşdırmadan istifadə edin. Hər bir server instansiyası WebSocket qoşulmalarının öz payını emal edir və serverlərarası mesaj istiqamətləndirməsi üçün ümumi məlumat şinindən istifadə olunur. Bu yanaşma milyonlarla eyni vaxtda siqnal sessiyalarını emal etməyə imkan verir.

Signaling Server nasazlıq nöqtəsi ola bilərmi?

Signaling Server yalnız əlaqənin qurulması mərhələsində kritikdir. Server müvəqqəti olaraq əlçatmazdırsa, aktiv WebRTC zəngləri davam edir — media trafiki birbaşa peer-lər arasında gedir. Problem yalnız yeni əlaqə qurmağa cəhd edərkən yaranır. Etibarlılıq üçün server klasterləşdirməsindən və ehtiyat siqnal kanallarından istifadə edin.

Nəticə

  • Signaling Server — WebRTC tətbiqinin koordinasiya qovşağı, əlaqə qurmaq üçün peer-lər arasında SDP və ICE məlumatlarının mübadiləsini təmin edir.
  • Funksiya — iştirakçılar arasında offer, answer və ICE candidates ötürülməsi, otaqların idarə edilməsi və peer qeydiyyatı.
  • Protokollar — WebSocket (veb tətbiqləri üçün ən populyar), SIP (VoIP inteqrasiyası üçün), XMPP (çatlar üçün), HTTP/SSE (sadə ssenarilər üçün).
  • SDP — Session Description Protocol, media parametrlərini təsvir edir: kodeklər, axın istiqaməti, seçmə tezliyi, kanalların sayı.
  • ICE — Interactive Connectivity Establishment, P2P əlaqəsi qurmaq üçün şəbəkə namizədlərinin toplanması və yoxlanılması prosesi.
  • Trickle ICE — ICE namizədlərinin aşkar edildikdən dərhal sonra göndərildiyi optimallaşdırma, qurulma müddətini 500–1500 ms-ə qədər azaldır.
  • Tövsiyə — miqyaslaşdırma üçün Redis Pub/Sub ilə klasterləşdirilmiş Signaling Server və siqnal trafikinin qorunması üçün TLS ilə WebSocket istifadə edin.

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.

Layihəni müzakirə et

Həm də oxuyun