Matambudziko ekuvhota kwenguva refu muJavaScript uye maitiro ekuzvigadzirisa

Kugadziridza kwekupedzisira: 01/23/2026
  • Kuvhota kwenguva refu kunotevedzera kusundidzirwa kweseva pamusoro peHTTP asi kune dambudziko remusoro wemusoro, kusagadzikana kwenguva, uye zvipingamupinyi zvezviwanikwa.
  • Maproxies, miganhu yekubatanidza browser, uye caching zvinogona kukanganisa chinyararire kana kuderedza maitiro ekuvhota kwenguva refu.
  • Maitiro akaita seBayeux neBOSH anovakira pakuvhota kwenguva refu kuti vape mameseji anoenda kumativi maviri, kazhinji pamwe chete nekutepfenyura.
  • Nguva dzakagadziriswa, kupatsanura, kudzvanya, uye kuedzazve kungwarira zvakakosha kuti JavaScript irambe yakasimba kwenguva refu.

Dambudziko renguva refu rekuvhota muJavaScript

Kuvhota kwenguva refu muJavaScript kunoita sekunge kuri nyore: chengeta chikumbiro cheHTTP chakavhurika kusvika sevha yava nechimwe chinhu chekutaura, dzosera data, uye vhura chikumbiro chitsva ipapo ipapo. Kubva kunze zvinoita sekunge kutaurirana panguva chaiyo, saka hazvishamisi kuti machat apps, ma dashboards, mitambo, uye masisitimu ekuzivisa zvave zvichivimba nazvo kwemakore. Asi pasi pehutongi pane matambudziko mashoma ekushanda, kukura, uye kuvimbika anowanzo kuvadza kana app yako yakura kupfuura vashandisi vashoma.

Kunzwisisa matambudziko chaiwo ekuongororwa kwenguva refu muJavaScript zvinoreva kupfuura tsananguro yekutanga yekuti "mutengi anotumira chikumbiro, server inomirira, server inopindura" uye kutarisa semantics yeHTTP, miganhu yebrowser, maproxies, nguva dzekubuda, uye dzimwe nzira dzakadai seWebSockets, HTTP streaming, uye Server-Sent Events. Mugwaro iri tichaongorora zvakadzama kuti kuvhota kunoshanda kwenguva yakareba sei, ndeapi matambudziko akaonekwa neIETF nevatengesi vakuru, uye kuti tingasarudza sei kuti toishandisa riini, kuti toigadzirisa riini, uye kuti toitsiva riini zvachose.

Chii chinonzi kuvhota kwenguva refu muJavaScript?

Tsananguro yeJavaScript yekuvhota kwenguva refu

Muchidimbu, kuvhota kwenguva refu inzira yakavakirwa pamusoro peHTTP yakajairika apo browser inotumira chikumbiro uye sevha inononoka kupindura nemaune kusvika data idzva rawanikwa kana kuti nguva yekumira yapera. Kana browser yangogamuchira mhinduro, inogadzirisa data racho uye inobva yatangazve chimwe chikumbiro, zvichiita kuti kubatana "kunenge nguva dzose" kurambe kwakamirira.

Kufambiswa uku kwakasiyana zvikuru nekuongorora kupfupi kwenguva pfupi, uko mutengi anobvunza sevha nguva yakatarwa achibvunza kuti "pane chimwe chinhu chitsva here?" zvisinei nekuti pane zvichangobva kugadziriswa. Nekuvhota kwenguva refu, sevha inochengeta chikumbiro chakavhurika panguva dzisina kushanda, saka mutengi haafanire kutumira vhoti dzisina chinhu kakawanda kana pasina chakachinja.

Chimiro cheJavaScript chakajairika chekuvhota chinoita sebasa re recursive subscribe rinodaidza fetch (kana XMLHttpRequest), rinomirira mhinduro, rinobata mutoro, uye rozozvidaidza zvakare. Kana network ikadonha kana kukanganisa kukamuka, kodhi yacho inoedzazve ipapo ipapo kana mushure mekunonoka kudiki, ichiedza kuchengetedza kubatana ikoko kuripo kuripo zvakanyanya sezvinobvira.

Maitiro aya anoshanda zvakanaka kana mameseji asingawanzoitiki, nekuti nguva isina kushanda pakubatanidza haikonzeri traffic ye network kana CPU kupfuura mari yekuchengeta socket yakavhurika. Mushandisi anowana ruzivo rwechizvino-zvino, nepo sevha ichidzivirira kuongororwa nguva dzose kwekuongorora mapoinzi.

Zvisinei, kana zviitiko zvangotanga kuwanda, chiitiko chega chega chinowanzo konzera kutenderera kwemhinduro yeHTTP yese—mutsara wemamiriro, misoro, authentication, muviri—saka mutengo wega wega meseji unogona kuputika uye maitiro ekufambisa anotanga kutaridzika sema "saw-tooth" ekukumbira/kupindura. Ndipo panotanga kuoneka matambudziko ekukwira kwesimba uye overhead mumaapp chaiwo.

Kuvhota kwenguva pfupi vs kuvhota kwenguva refu vs kutenderera

Kuenzanisa pakati pekuvhota kwenguva refu uye dzimwe nzira

Kuti unyatsonzwisisa dambudziko, zvinobatsira kusiyanisa kuvhota kwenguva refu nekuvhota kwenguva pfupi uye kuratidzwa kweHTTP, sezvo zvese zvitatu zviri nzira dzekunyepera "kusundidzira" pamusoro peprotocol yekukumbira/kupindura yakafanana neHTTP.

Kuvhota kwenguva pfupi ndiyo nzira isina kunanga: mutengi anotumira zvikumbiro zveHTTP nguva nenguva (semuenzaniso masekondi mashanu kusvika gumi ega ega) uye sevha inopindura ipapo ipapo chero meseji dzakasvika kubva pavhota yekupedzisira. Kana pasina chiripo, sevha inoramba ichipindura, kazhinji isina mutero, uye mutengi anongomirira kusvika nguva inotevera.

Modhi iyi ine zvinhu zviviri zvakaipa zviri pachena: nguva yekunonoka kwemashoko inogona kusvika padanho rekuvhota, uye sevha inomanikidzwa kubata zvikumbiro zvinodzokororwa kunyangwe pasina data idzva. Kune masisitimu madiki kana asina vanhu vakawanda, izvi zvingagamuchirwa, asi pamwero mukuru zvinotambisa maCPU cycles, network bandwidth, uye zvinogona kukonzera kunonoka kunoonekwa kune vashandisi.

Kuongororwa kwenguva refu kunovandudza izvi nekubvumira sevha "kumira yakavhurika" chikumbiro chega chega kusvika chimwe chinhu chinonakidza chaitika - chiitiko chekupa kana nguva yekumira. Kunonoka kwemashoko matsva kwava pedyo nekusvika pakudzokera kune imwe network, uye mhinduro dzisina chinhu dzinoitika kakawanda, zvichiita kuti vanhu vasawane mashoko akawanda.

Kuburitswa kweHTTP kunoenderera mberi nekusambovhara mhinduro zvachose: sevha inotumira mhinduro imwe chete yeHTTP uye yobva yaburitsa zvidimbu zvakawanda zvedata pamusoro pekubatana kumwe chete, zvakaparadzaniswa nezvikamu zvema framing padanho rekushandisa. Mutengi anoverenga rwizi zvishoma nezvishoma pane kumirira kuti mhinduro yese ipere.

MuHTTP/1.1 izvi zvinowanzoitwa kuburikidza ne chunked transfer encoding, apo sevha inoisa Transfer-Encoding: chunked uye yozotumira chidimbu chega chega chedata sechikamu chakasiyana chine musoro wayo wehurefu. Mukugadzirisa maitiro eHTTP/1.0, kutenderera kunogonawo kuitwa nekusiya Content-Length uye kushandisa connection close sechiratidzo chekupedzisira kwekuyerera.

Musiyano mukuru ndewekuti kuvhota kwenguva refu kunovhara mhinduro mushure memeseji yega yega, zvichimanikidza chikumbiro chitsva chechiitiko chinotevera, ukuwo kutenderera kwemashoko kuchichengetedza mhinduro imwecheteyo ichirarama uye kuchisundira mameseji sezvaanoitika. Izvozvo zvine zvazvinoreva zvikuru pakunonoka, kushandiswa kwendangariro, maproxies, uye marongero aunoita mameseji pachikamu cheapplication.

Mashandiro anoita HTTP long polling pasi pehood

Kubva pamaonero eprotocol yeHTTP, kuvhota kwenguva refu hakuunzi nzira itsva kana makodhi emamiriro ezvinhu; zvinongotambanudza semantics yenguva dzose yechikumbiro chinomirira mhinduro. Ongororo yeIETF ye "bidirectional HTTP" inojekesa kuti kuvhota kwenguva refu kuchiri kushanda HTTP 1.0/1.1, asi kunosundira modhi pedyo nemiganhu yayo.

Kutenderera kwehupenyu hwekukurukurirana kwenguva refu kwekuongorora kunotaridzika seizvi: mutengi anotumira chikumbiro chekutanga uye anomira, sevha inononoka mhinduro kusvika chiitiko, mamiriro ezvinhu achinja, kana nguva yapera, ipapo sevha inodzosera mhinduro yakazara yeHTTP (kazhinji 200 OK) nedata rechiitiko, uye pakupedzisira mutengi anoburitsa chikumbiro chitsva nekukurumidza.

Maitiro aya anogona kukwira pamusoro pekubatana kweHTTP kunoenderera mberi kana kusingagari; nekubatana kunoenderera mberi unodzivisa kubatwa maoko kweTCP kakawanda nekushandisa zvakare soketi imwechete kwenguva refu. Mukuita, kuchengetedza kubatana kweTCP kwakafanana kuripo kunowanzo shandiswa pakuita basa.

Maseva anoshandisa kuvhota kwenguva refu anowanzo fanirwa kubata mabhaketi maviri ezvishandiso pamutengi wega wega: kubatana kweTCP pachayo uye chikumbiro cheHTTP chakamirira mune imwe queue kana event loop. Masisitimu ekushanda anogona kubata akawanda masoketi akavhurika zvinobudirira, asi mamwe masevha eHTTP kana magedhi anopa ndangariro yakakosha pakukumbira, iyo inogona kuva dambudziko guru.

Chimwe chinhu chinonakidza chekuvhota kwenguva refu ndechekuti kana zvinhu zvaoma, zvinodzikira zvakanaka nekuwedzera kunonoka pane kukundikana nesimba. Kana sevha iri kunonoka, mameseji akananga kumutengi anomira mumutsara kusvika mhinduro yatumirwa; zviitiko zvakawanda zviri mumutsara zvinogona kutobatanidzwa mumhinduro imwe chete refu yekuvhota, izvo zvinoderedza mari inobhadharwa pameseji.

Nyaya nemiganhu yekuvhota kwenguva refu

Kunyangwe ichishandiswa zvakanyanya uye ichishandiswa zvakajairika, kuongorora kwenguva refu kunounza matambudziko akati wandei anozivikanwa ehunyanzvi ayo ari nyore kuwana kubva kuJavaScript kana usingachenjere. Matambudziko aya anowanikwa mukushandiswa kwebandwidth, latency, manejimendi yekubatanidza, uye maitiro evatauriri vakaita semaproxies nemacache.

Mari yekutanga yaunosangana nayo yemusoro wenyaya ndiyo yaunotanga kusangana nayo: chikumbiro chega chega chekuvhota kwenguva refu uye mhinduro yacho ishoko rakazara reHTTP, kazhinji rine makuki, maheader ekusimbisa, uye mamwe metadata anogona kupfuudza mutoro chaiwo. Kune mameseji madiki, asingawanzoitiki, mari iyi inogona kugamuchirwa, asi mune zviitiko zvekubhadharisa zvinoenderana nevhoriyamu kana network dzine bandwidth shoma, musiyano uripo pakati pehukuru hwemusoro nehukuru hwemutoro unogona kudhura.

Kunonoka kukuru ndeimwe nyaya isina kujeka: nepo avhareji yekunonoka kwekuvhota kwenguva refu kwezviitiko zvitsva iri padanho rimwe chete rekufambisa netiweki, kunonoka kwakanyanya kunogona kunge kuri kwekufambisa kunopfuura katatu. Kana meseji ikasvika mushure mekunge sevha yatumira mhinduro, sevha inofanira kumirira chikumbiro chinotevera kubva kune mutengi isati yakwanisa kuunza meseji iyoyo, uye kurasikirwa kwepaketi yeTCP kana kudzoserwa kunogona kuwedzera nguva ino.

Kugadzwa kwekubatana kunowanzotaurwa sechinhu chinonetsa, kunyanya kana vanhu vachienzanisa kuvhota kwenguva refu neWebSockets. Kana mhinduro yega yega yekuvhota yakareba ikaita kuti HTTP connection (uye TCP connection iri pasi) ivharwe, mutengo wekuvhura masoketi kakawanda waizova mukuru. Nerombo rakanaka, kuvhota kwenguva refu kunogona uye kunofanira kuiswa pamusoro pekubatana kunoenderera mberi kuitira kuti musiyano mupfupi pakati pemhinduro usataridzwe sekusashanda; izvi zvinoita kuti kutakurwa kurambe kwakavhurika uye kuchishandiswazve.

Kugoverwa kwezvishandiso zveseva uye proxy idambudziko guru rinoshanda: chikumbiro chega chega chisina kubhadharwa chinotora memory uye pamwe thread kana mushandi mu synchronous architectures. Mazhinji maseva ekare kana anovhara haangosviki pamakumi ezviuru zvemapoll marefu panguva imwe chete nekuti modhi yavo ye concurrency inotarisira kuti chikumbiro chega chega chipedzwe nekukurumidza; kune aya masisitimu, asynchronous I/O kana dhizaini inotungamirirwa nezviitiko inenge ichidikanwa.

Maitiro ekuchengetedza data anogonawo kukanganisa kuvhota kwenguva refu kana asina kudziviswa zvakajeka. Ma cache epakati anogona kusarudza kushandisazve kana kuchengetedza mhinduro kunze kwekunge wanyatso nyora zvikumbiro zvepoll refu nemhinduro uchishandisa Cache-Control: no-cache (nema headers ane hukama), zvichiita kuti chikumbiro chega chega chisvike ku origin server uye hachina data rekare.

Nguva dzekubuda, maproxies, uye maitiro epakati

Chimwe chezvinetso zvinonetsa zvikuru munyika chaiyo nekuongororwa kwenguva refu muJavaScript ndechekuti haudzore zvizere network iri pakati pebrowser neserver. Maproxies, magateways, maload balancers, uye kunyange mabrowser defaults ese anoisa timeouts kana buffering strategies anogona kuputsa fungidziro yekuti connection iri live.

Zvikumbiro zvekutsvaga kwenguva refu zvinofanirwa kuramba zvakavhurika kusvika paitika chiitiko kana nguva yekumira yaunodzora, asi kutaura chokwadi vazhinji vanozobvisa kubatana mushure menguva pfupi yakatarwa. Kunyange hazvo mabrowsers achigona kutora masekondi angangoita mazana matatu (300 seconds) kana zvangoitika, mamwe maproxies anomanikidza nguva shoma dzekushanda, zvinoreva kuti ongororo yako refu ichapera neHTTP 504 Gateway Timeout kana kungoisa patsva, zvichimanikidza mutengi kuti adzokorore kubatana kakawanda kupfuura zvawaida.

Kuedza uye ruzivo rwekushanda zvinoratidza kuti nguva yekubuda kwemhepo inosvika masekondi makumi matatu inzira yakachengeteka munzvimbo dzakawanda, nemasekonzi zana nemakumi maviri anowanzo shanda asi achinyanya kusimba. Vatengesi vemidziyo yenetiweki vanoda kugara kwenguva refu vachigamuchira vanhu vanokurudzirwa kushandisa nguva yekubuda kwevashandi kwenguva yakareba kupfuura nguva dzinoshandiswa pakutumira vanhu panetiweki kuitira kuti nguva yekuvhota irege kufa nguva isati yakwana.

Maproxies ekudzokera shure uye kubatana kwekubatanidza zvinounza rumwe rudzi rwematambudziko. Mamwe maproxy setups ane dhamu diki rekubatana pakati pevatengi vazhinji; kana mapolls marefu akatora hukama ihwohwo kwenguva yakareba, zvimwe zvikumbiro zvinogona kushaikwa kana kurongwa mumutsara, zvichikanganisa mashandiro ewebhusaiti yese.

Nekuburitswa kweHTTP, kuvharidzira pakati pemashoko (intermediary buffering) injodzi yakakura nekuti maproxies anobvumirwa kuvharidzira mhinduro dzisina kukwana uye kutumira data chete kana awana mhinduro yakazara. Kana zvakadaro, sevha yekubuditsa mashoko inotumira zvidimbu zvidiki zveJavaScript ichitarisira kuitwa nekukurumidza mubrowser inogona kuona kuti murevereri anochengeta zvese kusvika kubatana kwapera, zvichiparadza zvachose maitiro epanguva chaiyo.

Miganhu yebrowser uye huwandu hwekubatanidza

Kubva kuJavaScript, haumbofa wakachinja zvakananga maTCP connections; unongoona ma constructs epamusoro-soro akadai se fetch kana XMLHttpRequest, asi mabrowser anoisa miganhu yekuti mangani ma parallel connections anogona kuvhurwa kune imwe host. Muganho uyu waive wekubatana kaviri pamavambo, izvo zvakaita kuti matekiniki emhando yeComet ave akaoma zvikuru.

Mabrowser emazuva ano arerutsa zvirambidzo izvi kusvika pakubatana kunosvika matanhatu kana masere pamunhu wese, asi hapasisina nzira yakajairika kubva kuJavaScript yekubvunza kuti "kwasara kubatana kungani?" kana kuronga mashandisirwo ema tabs nema iframes. Tabhu yega yega inogona kuzvitenderedza yega, ichikurumidza kupedza nzvimbo dziripo uye ichivhara zvimwe zvikumbiro zvakakosha zvakaita seCSS, mifananidzo, kana API calls.

Nzira yakanakisisa kune server ndeyekushandisa makuki kana imwe nzira yekubatanidza kuti uone mapolls akawanda akareba anobva mubrowser imwe chete uye kudzivirira kuanonoka ese. Nekupindura nekukurumidza kusarudzo dzakareba uye kungoisa nhamba imwe chete kana shoma, unogona kuderedza njodzi yekushaya simba kwekubatanidza kana kukanganiswa kwemapaipi.

Mamwe maprotocol epamusoro-soro akavakirwa pakuvhota kwenguva refu, akadai seBayeux neBOSH, anonyatso gadzira miganhu yekubatanidza browser. Vanowanzo shandisa zvikumbiro zviviri zveHTTP panguva imwe chete uye vanodzivisa kuvimba neHTTP pipelining, iyo isingatsigirwi zvakanaka uye isingadzoreki kubva kuJavaScript.

Kugadzira mapaipi eHTTP, kuumba frame, uye kurongeka kwemashoko

Kunyange zvazvo HTTP inotumira zvikumbiro zvakawanda panguva imwe chete usati wawana mhinduro, mudzidziso inogona kuderedza nguva yekunonoka kwekutsvaga, asi mukuita kwayo haina kusimba uye haishandiswi zvakanaka. RFC 2616 inongwarira nezvekushandisa mapaipi, kunyanya kune zvikumbiro zvePOST, uye vamiririri kana vatengi vanogona kuidzima zvachose.

Maitiro anoedza kushandisa nzira dzekufambisa pombi kwenguva refu anofanira kutanga aona kuti nzira dzekufambisa pombi dzinotsigirwa zvakavimbika kubva pakutanga kusvika pakupedzisira; kana zvikasadaro, anodzokera kumaitiro ekuchengetedza, asina kupindira papombi. Kubva pane JavaScript environment yebrowser, hauna ma hook ekugadzirisa izvi, saka ma JavaScript-based long polling stacks akawanda anongofunga kuti pipelining haigoneke.

Kuisa frame — nzira yaunokamura rukova rwemabyte rwunoramba rwuchienderera mberi kuita mameseji akasiyana ekushandisa — ndeimwe musiyano mudiki pakati pekuongorora kwenguva refu neHTTP streaming. Nekuvhota kwenguva refu, mhinduro yega yega yeHTTP inotakura meseji imwe chete kana boka rimwe chete, saka kufora kwako hakuna kujeka: mhinduro imwe chete yakaenzana nechikamu chimwe chete chedata rine zvarinoreva.

Mukubuditsa mawebhusaiti, haugone kuvimba nemiganhu yezvikamu zveHTTP senzira yekuisa mawebhusaiti ako, nekuti maproxies anogona kubatanidza data, kubatanidza zvikamu, kana kuzvipatsanura zvakasiyana. Izvi zvinoreva kuti app inofanira kuisa zvidziviriro zvayo kana kuti ma prefixes ekureba mu payload uye yoongorora zvinoenderana nemutengi.

Kurongeka kwemashoko uye kuvimbika hazvivimbiswe nekuongororwa kwenguva refu; zvinoenderana neprotocol yako yekushandisa uye layer yekuchengetedza. Kana mutengi akadzima obatanidzazve pakati pevhidhiyo, unoda nzira dzakajeka (dzakadai senhamba dzekutevera kana maID ekupedzisira) kuti uve nechokwadi chekuti hapana mameseji akarasika kana kutumirwa asina kurongeka.

Kufunga nezvekuchengetedza pakuvhota kwenguva refu muJavaScript

Kutsvaga kwenguva refu senzira hakuchinje modhi huru yekuchengetedza yeHTTP, asi nzira yainowanzo shandiswa nayo—kunyanya mumabhurawuza anoshandisa JavaScript—inogona kuvhura mukana wekuwedzera njodzi.

Mhinduro zhinji dzekuongorora ma "cross-domain long polling" dzinovimba nekushandisa JavaScript yakadzoserwa kubva kuseva, dzimwe nguva kuburikidza neJSONP-style callbacks kana imwe dynamic script injection. Kana sevha yako iri panjodzi yekurwiswa nejekiseni, murwisi anogona kuisa kodhi isina kurongeka mumhinduro idzodzo, iyo browser inozoshandisa ropafadzo dzepeji.

Kushandisa HTTPS kwese kwese hakugone kutaurirana: encrypting transport inodzivirira kubva pakukanganiswa kwevanhu vari pakati nepakati uye kuteererwa kwemashoko pazvibvumirano zvinogara kwenguva refu. Pamwe chete nekusimbiswa kwechokwadi uye mvumo (semuenzaniso, kubvumidzwa kwechiratidzo uye kutonga kwekuwana ruzivo rwakavakirwa pamabasa), unogona kuchengetedza nzvimbo refu dzekuvhotera dzakaganhurirwa kune vatengi vaunoda.

Sezvo kuvhota kwenguva refu kuchichengetedza kubatana kwakawanda kwenguva yakareba, zvinogona kuita kuti kurwiswa kweDoS kuve kwakanaka: murwisi angaedza kupedza simba remaseva nekuvhura mavhoti akawanda enhema. Kuderedza mwero, huwandu hwekubatana paIP kana token, uye nguva dzakakodzera dzekudzivirira zvinhu zvakakosha.

Zvipingamupinyi zvinoenderana nebrowser senge CSRF hazviwanzo kuve pakati pemapoll eXHR/fetch akareba asingashandisi ma cookies, asi kana ma cookies achibatanidzwa, unofanira kuramba uchiona aya ma endpoints sezvaungaita chero imwe API inonzwisisika. Makuki eSameSite, ma tokens eCSRF pazvinenge zvakakodzera, uye mitemo yakasimba yeCORS zvese chikamu chekugadzirisa kwakasimba.

Kuvhota kwenguva refu vs WebSockets uye Zviitiko Zvakatumirwa neServer

Kubva pamaonero emugadziri weJavaScript, kuongorora kwenguva refu, WebSockets, uye Server-Sent Events inzira dzese dzekuwana maficha e "real-time feeling", asi kuchinjana kwakasiyana zvakanyanya.

WebSockets inoumba nzira inogara iripo, yakazara-duplex pakati pebrowser neserver. Mushure mekutanga HTTP upgrade handshake, data frames dzinogona kufamba nenzira mbiri pasina overhead yeHTTP headers yemeseji yega yega, zvichideredza latency ye per-message uye kushandiswa kwebandwidth.

Izvi zvinoita kuti WebSockets ive yakakodzera kune zviitiko zvinoitwa kakawanda zvakaita semitambo yevatambi vakawanda, kugadzirisa pamwe chete, kana kuyerera kwe telemetry uko mameseji ari madiki asi anowanzo shandiswa. Dambudziko nderekuti mamwe ma firewall emakambani, ma proxies ekare, kana vatengi vekare havachafariri zvakanaka nekuvandudzwa kweWebSocket, uye maseva anofanirwa kushandisa imwe programming model uye infrastructure yakagadzirirwa akawanda ma sockets anogara kwenguva refu.

SSE iri nyore pane WebSockets kana uchida chete kusundidzirwa kweserver-to-client, asi haigone kutumira mameseji kubva kubrowser kuburikidza nechiteshi chimwe chete; uchiri kuvimba nezvikumbiro zveHTTP zvakajairika zvekutaurirana kweclient-to-server. Zvinodawo kuti vatauriri vabvumire kutenderera uye vasanyanya kuvharidzira mhinduro dzisina kukwana.

Zvichienzaniswa neizvi, kuongorora kwenguva refu kunowanzova "chinhu chakajairika" chinoshanda munzvimbo dzakawanda, kusanganisira mabhurawuza ekare uye ma network akachengetedzwa. Ndosaka mapuratifomu mazhinji epanguva chaiyo aishandisa kuongorora kwenguva refu senzira yekudzoreredza apo WebSockets yaivharwa, zvichivandudza zvishoma nezvishoma kubatana sezvo kugona kwacho kwaibvumidzwa.

Maitiro echokwadi pamusoro pekuvhota kwenguva refu: Bayeux, BOSH, SSE-like APIs

Maprotocol akati wandei epamusoro akavakirwa pamusoro pekuongorora kwenguva refu uye kutenderera kuti avanze kuomarara kubva kune vanogadzira maapplication uye kupa API yakafanana. Kunzwisisa mashandisiro avanoita kuongorora kwenguva refu kunobatsira kujekesa simba nekushaya simba kwenzira yacho.

Nzira yeBayeux, iyo yakafarirwa nechirongwa cheCometD, inotsigira HTTP long polling uye streaming senzira dzekutakura. Mutengi weBayeux anowanzo shandisa HTTP connections mbiri kune sevha kuitira kuti mameseji afambe munzira dzese dziri mbiri pasina kuvharwa mushure mekukumbira kwenguva refu kwesarudzo.

Panguva yekutanga kukwazisana, mutengi neseva vanotaurirana kuti ndeapi matekiniki anotsigirwa — kuvhota kwenguva refu, kutenderera, nezvimwewo — uye mutengi anosarudza imwe kubva pane inopindirana. Kune vatengi veJavaScript, Bayeux inowanzo dzivisa kuvimba neHTTP pipelining uye panzvimbo pezvo inongogumira kune zvikumbiro zviviri zvisina kubhadharwa kudzivirira matambudziko emiganhu yekubatanidza browser.

BOSH (Bidirectional-streams Over Synchronous HTTP) inobva kunyika yeXMPP uye yakagadzirwa kuti itevedzere session yakaita seTCP pamusoro peHTTP ichishandisa kuvhota kwenguva refu. BOSH connection manager inovhura chikumbiro chemutengi uye inopindura chete kana iine data kubva kuapplication server; kana mutengi angowana mhinduro iyoyo, inotumira chikumbiro chitsva, zvichiita kuti poll imwe chete irambe yakamirira kwenguva yakareba.

BOSH inogona kushandisa imwe kana mbiri dzeHTTP request-response pairs dzakafanana, dzakatauriranwa pakutanga kwechikamu, uye dzinonyatsodzibata kuti dziremekedze miganhu yekubatanidza browser uku dzichiri kubvumira asynchronous bidirectional messaging. Inorambidza kuvharidzira mafaira ekutumira mafaira akachekwa kuti isasanganise matambudziko pakati pevanopindirana uye inobvumira kudzvanywa kuburikidza neContent-Encoding kuti ishande zvakanaka.

Zviitiko Zvakatumirwa neSeva, kunyangwe zvichiwanzoitwa kuburikidza nekutepfenyura kwete kuvhota kwenguva refu, zvine hukama hwepedyo mumweya. Tsanangudzo yeW3C inotsanangura kushandisa mhinduro dzemashoko/zviitiko uye inoratidza kuti hapana chikonzero chekudzima HTTP chunking kunze kwekunge chiyero chezviitiko chakakwira zvakakwana, zvakare kudzivirira mamwe matambudziko ekugadzirisa uye epakati anoonekwa nekutenderera kweHTTP/1.1.

Kugadzirisa uye kuomesa kuvhota kwenguva refu mumapurogiramu eJavaScript

Kana ukasarudza kuti kuvhota kwenguva refu ndiyo sarudzo chaiyo kana kuti ndiyo nzira inodiwa yeJavaScript app yako, kune nzira dzakasiyana siyana dzekuita kuti ishande zvakanaka, iwedzere, uye yakasimba.

Kutanga, gadzirisa nguva yako yekubuda kwevhiki nevhiki zvakanaka. Kana wava mupfupi, uchapedza mari uchishandisa ma "reconnect" akawanda uye uchaisa vatengi vakawanda panjodzi yekukwanisa kubatanidzazve panguva imwe chete; kana wava mupfupi, unowedzera mukana wekusvika pamiganhu ye "proxy" kana "load balancer", zvichikonzera kusagadzikana kusinganzwisisike. Muchokwadi, ma "values" ari mu "20-30 seconds" eWaitTimeSeconds (mumaAPI akaita seAmazon SQS) uye "app-level timeouts" akafanana anowanzo ratidza chiyero chakanaka.

Zvadaro, funga nezvekubatanidza zviitiko padivi reseva kana mameseji akawanda akaiswa mumutsara wemutengi. Kupa mhinduro dzinoverengeka mumhinduro imwe chete refu yekuongorora kunoderedza zvakanyanya mari inobhadharwa pameseji uye kunogona kubatsira sisitimu kudzikira zvakanyanya kana yaiswa mutoro nekuchinjana nguva yekunonoka kuti ionekwe.

Kudzvanya ndeimwe nzira iri nyore yekukunda: kugonesa gzip kana encoding yakafanana yeJSON payloads munguva refu yekuvhota kunogona kuderedza kushandiswa kwebandwidth, kunyanya kana mameseji aine chimiro chinodzokororwa. Kuchinjana kwacho kunodhura CPU yakawanda pakushandisa compression, asi mumabasa mazhinji chaiwo anodarika nguva shoma yekutumira network.

Kubva kudivi reJavaScript, kugadzirisa zvikanganiso zvakasimba uye kuedzazve logic hazvigone kutaurirana. Nzira yako yekunyorera inofanira kuona zvikanganiso zvenetwork, nguva yekudzima, kana mhinduro dzisina kunaka uye yoedzazve ne backoff pane kudzvanya server. Exponential backoff ne jitter inzira yakajairika yekudzivirira madutu ekudzokorora akabatana panguva yekudzima.

Chekupedzisira, chenjerera nezvekuchenesa kubatana kana zvikamu zvikabviswa kana ma tabo akavharwa. Zvidimbu zvekuvhota zveZombie zvinoramba zvichimhanya kumashure zvinogona kuongorora zvese zviri zviviri zviwanikwa zvevatengi uye kugona kweseva, saka gara uine chokwadi chekuti une nzira yekudzima mafambiro asina kubhadharwa kana kubvisa ma controller kana maonero aparadzwa kana mushandisi aenda.

Kutsvaga vanhu kwenguva refu muJavaScript kuchiri chishandiso chine simba chekuvaka zvinhu zviri pedyo nenguva chaiyo munzvimbo dzisina WebSockets kana SSE, asi kunouya nemari yakawanda yakavanzwa pamusoro pemisoro, nguva yekubuda, maproxies, uye mashandisirwo ezviwanikwa zvaunoda kunzwisisa nekugadzirisa kana uchida kuti app yako ikure zvakanaka.

chinu
Nyaya inoenderana:
Flask uye Server-Yakatumirwa Zviitiko: Chaiyo-Nguva Patani, Zvishandiso, Maitiro
Related posts: