Ohjelmointi

SIP-ohjelmointi Java-kehittäjälle

SIP (Session Initiation Protocol) on IETF: n (Internet Engineering Task Force) kehittämä ohjausprotokolla (signalointi) interaktiivisten multimedia-IP-istuntojen hallintaan, mukaan lukien IP-puhelimet, läsnäolo ja pikaviestit. Java-yhteisöprosessin kautta kehitetty SIP-palvelinspesifikaatio (Java-määrityspyyntö 116) tarjoaa standardin Java-ohjelmointimallin SIP-pohjaisten palvelujen toimittamiseen. SIP Servlet johtaa Java Platform, Enterprise Editionin suosittuun Java-servlet-arkkitehtuuriin (Java EE on Sunin uusi nimi J2EE: lle).

IT ja televiestintä ovat lähentymässä. Verkko-IT-sovellukset, tyypillisesti dataorientoituneet, sulautuvat viestintäsovelluksiin. Verkkosivuilla esiintyvien Soita-painikkeiden lisääntyvä määrä on esimerkki tästä integraatiosta. SIP-palvelinspesifikaatio tuo Java-kehittäjille tutun ohjelmointimallin yhdistettyjen sovellusten rakentamiseen. Tämä artikkeli antaa vaiheittaisen johdannon siitä, miten SIP-palvelinsovellusta käytetään yksinkertaisen kaiun chat-palvelun luomiseen.

Istunnon aloittamisprotokolla

Määritelty pyynnössä Kommentit 3261, SIP on protokolla multimedia-IP-viestintäistuntojen luomiseksi, muokkaamiseksi ja lopettamiseksi. Kuva 1 on yksinkertainen esimerkki SIP: n käytöstä VoIP (Voice-over Internet Protocol) -puhelun muodostamiseen:

Kaikki kuvan 1 valkoiset viivat edustavat SIP-viestintää. Soittaja lähettää SIP INVITE -pyynnön kutsua "henkilöt" perustamaan ääniistunnon. Callee vastaa ensin viestillä, jolla on 180 tilakoodi osoittaakseen puhelimen soivan. Heti kun puhelin on vastaanotettu, soittajalle lähetetään vastaus 200-tilakoodilla kutsun hyväksymiseksi. Soittaja vahvistaa ACK-viestillä, ja istunto on muodostettu. Kun istunto on muodostettu, varsinainen digitoitu äänikeskustelu lähettää tyypillisesti reaaliaikaisen lähetysprotokollan (RTP) kautta istunnon kanssa, kuten punainen viiva kuvassa 1 osoittaa. Kun keskustelu päättyy, lähetetään SIP BYE -pyyntö, jota seuraa vastaus 200-tilakoodilla istunnon päättämisen vahvistamiseksi.

Tässä on esimerkki SIP INVITE -pyynnöstä ja vastauksesta, jossa on 200 OK-tilakoodi:

SIP-KUTSUPYYNTÖ: KUTSU sip: [email protected] SIP / 2.0 kautta: SIP / 2.0 / UDP pc.caller.com; branch = z9hG4bK776asdhds Enimmäissiirrot: 70 Vastaanottaja: Callee Lähettäjä: Soittaja; tag = 1928301774 Soittotunnus: a84b4c76e66710 CSeq: 314159 KUTSU Yhteyshenkilö: Content-Type: application / sdp Content-Length: 142

(sisältö (SDP) ei näy)

SIP 200 OK-vastaus:

SIP / 2.0 200 OK kautta: SIP / 2.0 / UDP pc.caller.com; branch = z9hG4bK776asdhds; vastaanotettu = 192.0.2.1 Vastaanottaja: Callee; tag = a6c85cf Lähettäjä: Caller; tag = 1928301774 Soittotunnus: a84b4c76e66710 CSeq: 314159 INVITE Yhteyshenkilö: Content-Type: application / sdp Content-Length: 131

(sisältö (SDP) ei näy)

Kuten näette, SIP-muoto muistuttaa HTTP: tä. SIP on kuitenkin verrattuna HTTP: hen:

  • Vastaa istunnonhallinnasta. Varsinainen multimediasisältö, kuten pikaviestit, ääni ja video, voidaan lähettää tai olla välittämättä SIP: n kautta.
  • Asynkroninen ja tilallinen. Kutakin SIP-pyyntöä varten voi olla useita vastauksia. Tämä tarkoittaa, että sovelluksen on käsiteltävä jokainen SIP-viesti oikeassa tilassa.
  • Sovellusprotokolla, joka voi toimia sekä luotettavalla että epäluotettavalla kuljetuksella. Siten sovelluksen on taattava sanoman toimitus sanoman uudelleenlähetyksellä ja kuittauksella.
  • Peer-to-peer-protokolla, jossa ei ole selkeää eroa asiakkaan ja palvelimen välillä. Kummankin osapuolen on voitava lähettää ja vastaanottaa pyyntöjä ja vastauksia.

SIP-pohjaiset palvelut

SIP-pohjaiset palvelut ovat SIP-palvelimia, jotka tarjoavat palveluja, kuten viestien reititystä, SIP-päätepisteille, kuten IP-puhelimille. Esimerkiksi kuvassa 2 SIP-rekisteröintipalvelin ja välityspalvelin tarjoavat SIP-rekisteröinti- ja välityspalveluja auttaakseen SIP-päätepisteitä etsimään ja kommunikoimaan keskenään.

Kuva 2 kuvaa seuraavaa:

  1. Callee rekisteröi itsensä rekisteröintipalvelimelle lähettämällä REGISTER-pyynnön.
  2. Rekisteröintipalvelin hyväksyy rekisteröinnin, joka sisältää vastaanottajan nimiosoitteen, vastaamalla 200 OK-tilakoodilla.
  3. Soittaja pyytää muodostamaan yhteysistunnon Calleen kanssa lähettämällä INVITE-pyynnön välityspalvelimelle. KUTSU-viestin sisältö sisältää tyypillisesti viestinnän istunnon, jonka soittaja haluaa luoda, kuvauksen, kuten mediatyyppi, suojaus tai IP-osoite. Kuvaus on tyypillisesti SDP (Session Description Protocol) -muodossa.
  4. Välityspalvelin etsii rekisteröintipalvelimen selvittääkseen vastaanottajan nykyisen osoitteen. Huomaa, että haku on toteutusongelma, joka ei ole osa SIP: tä.
  5. Välityspalvelin välittää KUTSU-pyynnön soittajalta henkilölle sen nykyisen osoitteen perusteella.
  6. Callee hyväksyy kutsun vastaamalla 200 OK-tilakoodilla. 200 OK-vastaus KUTSU-pyyntöön sisältää tyypillisesti kuvauksen yhteysistunnosta, jonka henkilöt voivat muodostaa soittajan kanssa.
  7. Välityspalvelin välittää 200 OK: n vastauksen soittajalta soittajalle.
  8. Soittaja vahvistaa istunnon perustamisen lähettämällä ACK-viestin välityspalvelimelle. ACK-viesti voi sisältää lopullisen sopimuksen istunnosta.
  9. Proxy-palvelin puolestaan ​​välittää ACK: n Calleelle. Siten kolmisuuntainen kättely suoritetaan välityspalvelimen kautta ja istunto muodostetaan.
  10. Nyt yhteydenotto soittajan ja soitettavan välillä tapahtuu. Viestintään käytetty protokolla voi olla SIP tai ei. Esimerkiksi pikaviestejä voidaan lähettää SIP: n kautta. Äänikeskustelut lähetetään tyypillisesti RTP: n kautta.
  11. Callee lopettaa keskustelun ja haluaa lopettaa istunnon lähettämällä BYE-pyynnön.
  12. Soittaja vastaa 200 OK-tilakoodilla hyväksymään istunnon päättämisen.

Yllä olevassa skenaariossa SIP-välityspalvelin yksinkertaisesti reitittää viestit toimihenkilön nykyiseen osoitteeseen. Kuten voitte kuvitella, mielenkiintoisempia ja älykkäämpiä reitityspalveluja voi tapahtua. Esimerkiksi välityspalvelin voi "seurata käyttäjää" reitittämällä viestit sinne, missä hän on tavoitettavissa, kuten matkapuhelimeen, vaikka joku soittaakin hänen toimistopuhelimellaan.

SIP-servlet

Määritetty Java-määrityspyynnössä 116 SIP-palvelinspesifikaatio tarjoaa kontti-servlet-ohjelmointimallin SIP-sovelluksille. Koska se on johdettu Java EE: n Java-servlet-arkkitehtuurista, JSR 116 tuo tutun lähestymistavan SIP-palvelujen rakentamiseen Java EE -kehittäjille.

Seuraavassa taulukossa on yhteenveto niiden välisestä samankaltaisuudesta HTTPServlet ja SIPServlet.

Vertailu HTTP- ja SIP-palvelinsovellusten välillä

 HTTP SIEMAILLA
Servlet-luokkaHttpServletSipServlet
IstuntoHttpSessionSipSession
SovelluspakettiSOTASAR
Käyttöönoton kuvausweb.xmlsip.xml

Aivan kuten HTTP-palvelinsovellukset, SIP-palvelinsovellukset laajentavat javax.servlet.sip.SipServlet luokka, mikä puolestaan ​​laajentaa javax.servlet.GenericServlet luokassa. Kuten olet ehkä arvannut, SipServlet ohittaa palvelu (ServletRequest-pyyntö, ServletResponse-vastaus) tapa käsitellä erityyppisiä SIP-viestejä.

Koska SIP on asynkroninen, vain yksi pyynnön ja vastauksen argumenteista palvelu () menetelmä on kelvollinen; toinen on tyhjä. Esimerkiksi, jos saapuva SIP-viesti on pyyntö, vain pyyntö on kelvollinen ja vastaus nolla, ja päinvastoin. Oletustoteutus SipServlet luokka lähettää pyyntöjä doXXX () menetelmät ja vastaukset doXXXResponse () menetelmiä yhdellä argumentilla. Esimerkiksi, doInvite (SipServletRequest-pyyntö) SIP-kutsupyynnölle ja doSuccessResponse (SipServletResponse-vastaus) SIP 2xx -luokan vastauksille. Tyypillisesti SIP-servletit ohittavat doXXX () menetelmät ja / tai doXXXResponse () menetelmiä sovelluslogiikan tarjoamiseksi.

Kuinka lähetät SIP-vastauksia, jos doXXX () menetelmiä? SIP-palvelinsovelluksissa sinun on soitettava johonkin createResponse () menetelmät javax.servlet.sip.SipServletRequest luokkaan luomaan vastausobjektin. Soita sitten lähettää() menetelmä vastausobjektissa vastauksen lähettämiseksi.

Entä SIP-pyynnön luominen SIP-palvelinsovellukseen? SIP-pyyntöjä voidaan luoda kahdella tavalla: Soita jommallekummalle createRequest () menetelmät SipSession luokkaan luomaan SIP-pyyntö istunnon aikana tai yksi createRequest () menetelmiä javax.servlet.sip.SipFactory luoda SIP-pyyntö uudessa SipSession. Saada esimerkki SipFactory, sinun on soitettava getAttribute ("javax.servlet.sip.SipFactory") on ServletKonteksti luokassa.

SipFactory on tehdasrajapinta SIP Servlet -sovellusliittymässä erilaisten API-abstraktioiden, kuten pyyntöjen, osoiteobjektien ja sovellusistuntojen, luomiseen. Yksi mielenkiintoinen esine, jonka on luonut SipFactory On javax.servlet.sip.SipApplicationSession. JSR 116: n tarkoituksena on luoda yhtenäinen servlet-säilö, joka voi suorittaa sekä HTTP- että SIP-palvelinsovelluksen. SipApplicationSession tarjoaa protokolla-agnostisen istunnon objektin sovellustietojen tallentamiseksi ja vastaavien protokollakohtaisten istuntojen, kuten SipSession ja HttpSession. Toivottavasti tämä konsepti otetaan käyttöön Servlet-sovellusliittymän tulevissa versioissa javax.servlet.ApplicationSession sijasta javax.servlet.sip.SipApplicationSession.

SipApplicationSession hallinnoi protokollakohtaisia ​​istuntoja, kuten SipSession. SipSession käyttöliittymä edustaa kahden SIP-päätepisteen välistä piste-piste-suhdetta ja vastaa suunnilleen kommenttipyynnössä 3261 määritettyä SIP-valintaikkunaa. SipSession on luonnostaan ​​monimutkaisempi kuin HTTP-vastine SIP: n edellä mainitun asynkronisen ja epäluotettavan luonteen vuoksi. Esimerkiksi kuvassa 3 on esitetty SipSession JSR 116: ssa määritellyt tilasiirtymät:

Tyypillisesti HttpSession luodaan, kun käyttäjä kirjautuu sisään ja tuhoutuu uloskirjautumisen jälkeen. A SipSession edustaa tyypillisesti yhtä loogista keskustelua, vaikka sinulla olisi useita keskusteluja samojen päätepisteiden välillä. Niin SipSession on dynaamisempi ja lyhyempi käyttöikä.

Kehittyneempiä keskusteluja SipSession elinkaari ja sen suhde SIP-valintaikkunaan ylittää tämän artikkelin soveltamisalan. Onneksi kontti hoitaa suurimman osan monimutkaisuudesta, kuten elinkaaren ja tilasiirtymät, ja SipSession voidaan yksinkertaisesti käyttää istuntotietojen tallennustilana.

Täydellinen esimerkki: EchoServlet

EchoServlet on SIP-palvelinsovellus, joka voi toistaa Windows Messengeriin kirjoittamasi pikaviestit:

$config[zx-auto] not found$config[zx-overlay] not found