Programiranje

Programiranje SIP za razvijalca Java

SIP (Session Initiation Protocol) je nadzorni (signalni) protokol, ki ga je razvila Internet Engineering Task Force (IETF) za upravljanje interaktivnih večpredstavnostnih IP sej, vključno z IP telefonijo, prisotnostjo in takojšnjim sporočanjem. Specifikacija strežniškega programčka SIP (Zahteva za specifikacijo Java 116), razvita v okviru procesa Java Community, zagotavlja standardni programski model Java API za zagotavljanje storitev, ki temeljijo na SIP. Izhaja iz priljubljene arhitekture Java servlet Java Platform, Enterprise Edition (Java EE je novo ime Sun za J2EE), SIP Servlet prinaša rešitve SIP za razvoj spletnih aplikacij.

IT in telekom se zbližujeta. Omrežne IT-aplikacije, običajno usmerjene v podatke, se združujejo s komunikacijskimi aplikacijami. Primer te integracije je vse večje število gumbov »Pokliči me«, ki se pojavljajo na spletnih straneh. Specifikacija strežniškega programčka SIP razvijalcem Jave ponuja znani programski model za izdelavo konvergentnih aplikacij. Ta članek daje podroben uvod o tem, kako uporabiti SIP Servlet za izdelavo preproste storitve echo chat.

Protokol za zagon seje

SIP, opredeljen v Zahtevi za komentarje 3261, je protokol za vzpostavljanje, spreminjanje in zaključevanje večpredstavnostnih komunikacijskih sej IP. Slika 1 je preprost primer uporabe SIP za vzpostavitev klica VoIP (glasovni internetni protokol):

Vse bele črte na sliki 1 predstavljajo komunikacijo SIP. Klicatelj pošlje zahtevo SIP INVITE, da pokliče klicanega, da vzpostavi glasovno sejo. Callee se najprej odzove s sporočilom s kodo stanja 180, ki označuje, da telefon zvoni. Takoj, ko telefon prevzame, se klicatelju pošlje odgovor s kodo stanja 200, da sprejme vabilo. Klicatelj potrdi s sporočilom ACK in seja je vzpostavljena. Ko je seja vzpostavljena, se dejanski digitalizirani glasovni pogovor običajno prenese prek protokola za prenos v realnem času (RTP) s sejo, kot kaže rdeča črta na sliki 1. Ko se pogovor konča, se pošlje zahteva SIP BYE, ki ji sledi odgovor s kodo stanja 200 za potrditev prekinitve seje.

Tu je primer zahteve za SIP INVITE in odgovor s kodo stanja 200 OK:

Zahteva za SIP INVITE: INVITE sip: [email protected] SIP / 2.0 prek: SIP / 2.0 / UDP pc.caller.com; branch = z9hG4bK776asdhds Max-Forwards: 70 To: Callee From: Caller; tag = 1928301774 Call-ID: a84b4c76e66710 CSeq: 314159 VABITE Kontakt: Vsebina-vrsta: application / sdp Dolžina vsebine: 142

(vsebina (SDP) ni prikazana)

Odziv SIP 200 OK:

SIP / 2.0 200 OK Prek: SIP / 2.0 / UDP pc.caller.com; podružnica = z9hG4bK776asdhds; prejeto = 192.0.2.1 Za: Callee; tag = a6c85cf Od: Caller; tag = 1928301774 ID klica: a84b4c76e66710 CSeq: 314159 INVITE Kontakt: Content-Type: application / sdp Dolžina vsebine: 131

(vsebina (SDP) ni prikazana)

Kot lahko vidite, je format SIP podoben HTTP. Vendar je v primerjavi s HTTP SIP:

  • Odgovoren za upravljanje sej. Dejanska večpredstavnostna vsebina, kot so neposredna sporočila, glas in video, se lahko prenaša prek SIP ali pa tudi ne.
  • Asinhrono in državno. Na vsako zahtevo SIP je lahko več odgovorov. To pomeni, da mora aplikacija obdelati vsako sporočilo SIP v ustreznem kontekstu stanja.
  • Aplikacijski protokol, ki lahko deluje tako na zanesljivem kot na nezanesljivem prevozu. Tako mora aplikacija zagotoviti dostavo sporočila s ponovnim pošiljanjem in potrditvijo sporočila.
  • Protokol peer-to-peer, pri katerem ni jasne razlike med odjemalcem in strežnikom. Obe strani morata biti sposobni pošiljati in prejemati zahteve in odgovore.

Storitve, ki temeljijo na SIP

Storitve, ki temeljijo na SIP, so strežniki SIP, ki ponujajo storitve, kot je usmerjanje sporočil, do končnih točk SIP, kot so IP telefoni. Na sliki 2 na primer strežnik registra SIP in strežnik proxy ponujata storitve registracije SIP in storitve proxy, da končnim točkam SIP pomagata pri iskanju in medsebojni komunikaciji.

Slika 2 prikazuje naslednje:

  1. Callee se registrira na registrskem strežniku s pošiljanjem zahteve REGISTER.
  2. Registracijski strežnik sprejme registracijo, ki vsebuje naslov imena klicatelja, tako da odgovori s kodo stanja 200 OK.
  3. Klic zahteva, da vzpostavi komunikacijsko sejo s klicateljem tako, da pošlje zahtevo INVITE na proxy strežnik. Vsebina sporočila INVITE običajno vsebuje opis komunikacijske seje, ki jo želi vzpostaviti klicatelj, na primer vrsto medija, varnost ali naslov IP. Opis je običajno v obliki protokola Session Description Protocol (SDP).
  4. Proxy strežnik poišče registrski strežnik, da ugotovi trenutni naslov klicatelja. Upoštevajte, da je iskanje vprašanje izvedbe, ki ni del SIP-a.
  5. Proxy strežnik posreduje zahtevo INVITE od klicatelja kličemu glede na njegov trenutni naslov.
  6. Callee sprejme povabilo, tako da odgovori s kodo stanja 200 OK. Odgovor 200 OK na zahtevo INVITE običajno vsebuje opis komunikacijske seje, ki jo lahko klicatelj vzpostavi s klicateljem.
  7. Proxy strežnik posreduje odgovor 200 OK od klicatelja kličočemu.
  8. Klicatelj potrdi vzpostavitev seje s pošiljanjem sporočila ACK na proxy strežnik. Sporočilo ACK lahko vsebuje končni dogovor o seji.
  9. Proxy strežnik nato posreduje ACK klicatelju. Tako se trosmerno rokovanje zaključi prek strežnika proxy in vzpostavi sejo.
  10. Zdaj se zgodi komunikacija med klicateljem in kličočim. Za komunikacijo se uporablja protokol SIP ali ne. Takojšnja sporočila se lahko na primer prenašajo prek SIP-ja. Glasovni pogovori se običajno prenašajo prek RTP.
  11. Zdaj klicanec zaključi pogovor in želi končati sejo s pošiljanjem zahteve BYE.
  12. Klicatelj odgovori s kodo stanja 200 OK, da sprejme zaključek seje.

V zgornjem scenariju strežnik proxy SIP sporočila preprosto usmeri na trenutni naslov klicatelja. Kot si lahko predstavljate, se lahko zgodijo bolj zanimive in pametne storitve usmerjanja. Proxy strežnik lahko na primer "sledi uporabniku" tako, da sporočila usmerja tja, kamor je dosegljiv, na primer mobilni telefon, tudi če nekdo kliče na njegov pisarniški telefon.

SIP Servlet

Opredeljena v zahtevi za specifikacijo Java 116, specifikacija programa SIP Servlet ponuja model programiranja vsebnik-servlet za aplikacije SIP. Ker izhaja iz arhitekture Java servletov v Java EE, JSR 116 razvijalcem Java EE ponuja znan pristop k gradnji storitev SIP.

Spodnja tabela povzema podobnost med HTTPServlet in SIPServlet.

Primerjava med strežnikom HTTP in SIP

 HTTP SIP
Razred servletovHttpServletSipServlet
SejaHttpSessionSipSession
Programski paketVOJNASAR
Opis uvajanjaweb.xmlsip.xml

Podobno kot strežniki HTTP, tudi strežniki SIP razširjajo javax.servlet.sip.SipServlet razred, ki pa razširja javax.servlet.GenericServlet razred. Kot ste že uganili, SipServlet preglasi storitev (zahteva za ServletRequest, odgovor ServletResponse) za obdelavo različnih vrst sporočil SIP.

Ker je SIP asinhron, je le en od argumentov zahteve in odziva v storitev () veljavna metoda; drugi je ničen. Če je na primer dohodno sporočilo SIP zahteva, je veljavna samo zahteva, odgovor pa ničen in obratno. Privzeta izvedba SipServlet razred pošlje zahteve na doXXX () metode in odzivi na doXXXResponse () metode z enim samim argumentom. Na primer, doInvite (zahteva za zahtevo SipServletRequest) za zahtevo za povabilo SIP in doSuccessResponse (odziv SipServletResponse) za odzive razreda SIP 2xx. Običajno preglasijo serpleti SIP doXXX () metode in / ali doXXXResponse () metode za zagotavljanje aplikacijske logike.

Kako pošljete SIP odgovore, če v odzivniku ni predmeta odziva doXXX () metode? V strežniških programčkih SIP morate poklicati enega od createResponse () metode v javax.servlet.sip.SipServletRequest razred za ustvarjanje odzivnega predmeta. Nato pokličite pošlji () metoda na odzivnem objektu za pošiljanje odziva.

Kaj pa ustvarjanje zahteve SIP v strežniku SIP? Zahteve SIP lahko ustvarite na dva načina: Pokličite enega od createRequest () metode na SipSession razred, da v seji ustvari zahtevo SIP ali eno od createRequest () metode na javax.servlet.sip.SipFactory da ustvarite zahtevo SIP v novem SipSession. Če želite dobiti primerek SipFactory, morate poklicati getAttribute ("javax.servlet.sip.SipFactory") na ServletContext razred.

The SipFactory je tovarniški vmesnik v API-ju strežnika SIP za ustvarjanje različnih abstrakcij API-jev, kot so zahteve, naslovni predmeti in seje aplikacij. En zanimiv predmet, ki ga je ustvaril SipFactory je javax.servlet.sip.SipApplicationSession. Namen JSR 116 je ustvariti enoten vsebnik strežniškega programčka, ki lahko poganja strežnik HTTP in SIP. SipApplicationSession zagotavlja protokolarno-agnostični objekt seje za shranjevanje podatkov aplikacije in korelacijo sej, specifičnih za protokol, kot je SipSession in HttpSession. Upajmo, da bo ta koncept sprejet v prihodnjih različicah API-ja Servlet javax.servlet.ApplicationSession namesto javax.servlet.sip.SipApplicationSession.

The SipApplicationSession upravlja seje, specifične za protokol, kot je SipSession. The SipSession vmesnik predstavlja razmerje od točke do točke med dvema končnima točkama SIP in približno ustreza pogovoru SIP, opredeljenemu v Zahteva za komentarje 3261. SipSession je zaradi zgoraj omenjene asinhrone in nezanesljive narave SIP bolj zapleten kot njegov HTTP. Na primer, slika 3 prikazuje SipSession državni prehodi, opredeljeni v JSR 116:

Običajno je HttpSession se ustvari, ko se uporabnik prijavi in ​​uniči po odjavi. A SipSession običajno predstavlja en logičen pogovor, tudi če imate več pogovorov med istimi končnimi točkami. Torej SipSession je bolj dinamičen in ima krajšo življenjsko dobo.

Naprednejše razprave o SipSession življenjski cikel in njegov odnos s pogovornim oknom SIP presega obseg tega članka. Na srečo posoda obravnava večino zapletenosti, kot so življenjski cikel in prehodi stanja, in SipSession lahko preprosto uporabite kot shrambo za podatke seje.

Popoln primer: EchoServlet

EchoServlet je strežniški programček SIP, ki lahko odmeva neposredna sporočila, ki jih vnesete v Windows Messenger:

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