Ar yra būdas perkelti PUSH duomenis iš žiniatinklio serverio į naršyklę?

Žinoma, aš žinau, Ajax, bet su Ajax problema yra ta, kad naršyklė turi dažnai apklausti serverį ir sužinoti, ar yra naujų duomenų. Tai padidina serverio apkrovą.

Ar yra geresnis būdas (net naudojant „Ajax“), išskyrus apklausą serveryje?

121
21 авг. nustatė Niyaz 21 rug. 2008-08-21 17:04 '08 at 17:04 pm 2008-08-21 17:04
@ 18 atsakymų

Taip, ieškote COMET http://en.wikipedia.org/wiki/Comet_(programming) . Kiti geri „Google“ paieškos terminai yra AJAX-push ir reverse-ajax.

65
21 авг. atsakymas, kurį pateikė Greg Hurlman 2008-08-21 17:07 '08, 17:07 2008-08-21 17:07

Taip, tai vadinama „ Reverse Ajax“ arba „ Comet“ . Kometas iš esmės yra bendras terminas, skirtas įvairiems būdams atidaryti ilgai trunkančius HTTP prašymus, kad būtų galima perduoti realaus laiko duomenis į interneto naršyklę. Norėčiau rekomenduoti „ StreamHub Push Server“ , jie turi puikias demonstracijas ir daug lengviau pradėti dirbti su juo nei su kitais serveriais. Greitai susipažinkite su „Comet“ ir „StreamHub“ mokymo priemone. Galite naudoti „Community Edition“, kurią galima parsisiųsti nemokamai, bet tik 20 vartotojų vienu metu. Komercinė versija yra vertas paramos, taip pat gausite SSL kliento adapterius ir Desktop .NET ir Java. Pagalba teikiama per „ Google“ grupę , tinkle yra geras vadovėlių krūvis ir yra adapteris „GWT Comet“ .

border=0
35
25 сент. Atsakymas duotas Nosrama 25 rugsėjis. 2009-09-25 19:29 '09 19:29 2009-09-25 19:29

Šiuo metu turite naudoti „WebSockets“. Tai yra 2011 m. Standartas, leidžiantis inicijuoti HTTP ryšius ir atnaujinti juos į dvipusį kliento-serverio pagrindu sukurtą pranešimų siuntimą.

Galite lengvai prisijungti prie „JavaScript“:

 var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any"); ws.onmessage = function (evt) { var message = evt.data; //decode message (with JSON or something) and do the needed }; 

Serverio pusės apdorojimas priklauso nuo dešimtainio kamino.

26
18 окт. atsakymas pateikiamas per 18 d. 2013-10-18 23:11 '13, 23:11 2013-10-18 23:11

Pažvelkite į kometą (tai, kad Ajax yra ploviklis ir Comet), kuri iš esmės yra „atvirkštinė Ajax“. Atminkite, kad tam reikia ilgalaikio ryšio su serveriu, kad kiekvienas vartotojas gautų pranešimus, todėl turėkite omenyje našumo pasekmes, kai rašote paraišką.

http://en.wikipedia.org/wiki/Comet_(programming)

9
21 авг. atsakymas duotas Dan Herbert 21 rug. 2008-08-21 17:08 '08 at 5:08 pm 2008-08-21 17:08

„Comet“ tikrai yra tai, ko norite. Priklausomai nuo jūsų kalbos / struktūros reikalavimų, yra skirtingų serverių bibliotekų. Pavyzdžiui, „ WebSync“ yra integruotas kompiuteris IIS serveris, skirtas ASP.NET/C#/IIS kūrėjams , ir yra daug kitų autonominių serverių, pavyzdžiui, taip pat, jei jums reikia glaudesnės integracijos su kitomis kalbomis.

5
27 нояб. Atsakymą pateikė jvenema lapkričio 27 d. 2009-11-27 18:59 '09 18:59 2009-11-27 18:59

Labai rekomenduoju praleisti laiką kometoje, bet aš nežinau, kokio realaus įgyvendinimo ar bibliotekos galite naudoti.

Tam tikra „callcenter“ valdymo skydelio žiniatinklio programa, kuri apima „Live Callcenter“ agento atnaujinimo ir skambučių eilės būseną, sukūrėme vidinį sprendimą, kuris veikia, bet yra toli nuo bibliotekos, kurią galite naudoti.

Tai, ką mes padarėme, yra įdiegti nedidelę tarnybą serveryje, kuris kalba su telefono sistema, laukia naujų įvykių ir išlaiko situacijos vaizdą. Ši paslauga suteikia mažą žiniatinklio serverį.

Mūsų žiniatinklio klientai per HTTP prisijungia prie šio interneto serverio ir paprašo naujausios nuotraukos (užkoduotos XML), jį parodo ir vėl eina, prašydami naujos nuotraukos. Šiame interneto serveryje galite:

  • Jei yra, grąžinkite naują nuotrauką
  • Užblokuokite klientą kelias sekundes (30 mūsų sąrankos), laukdami, kol įvykis uždarys ir pakeis nuotrauką. Jei tuo metu nebuvo sukurtas joks įvykis, jis grąžina tą pačią nuotrauką, tik palaikydamas ryšį gyvą, o ne kliento laukimo laiką.

Tokiu būdu, kai klientai apklausa, jis gauna atsakymą nuo 0 iki 30 sekundžių. Jei jau sukurtas naujas įvykis, jis jį gauna iš karto), kitaip jis bus užblokuotas, kol bus sukurtas naujas įvykis.

Tai iš esmės yra apklausa, tačiau tai yra šiek tiek protingas tyrimas, kad nebūtų perkaitęs interneto serveris. Jei kometas nėra jūsų atsakymas, esu tikras, kad tai gali būti įgyvendinama naudojant tą pačią idėją, tačiau plačiau naudojant AJAX arba koduojant JSON, kad gautumėte geresnių rezultatų. Jis buvo sukurtas prieš AJAX erą, todėl yra daug galimybių tobulinti.

Jei kas nors gali suteikti realų, bet tai neįtikėtiną įgyvendinimą, puikiai!

4
21 авг. atsakymą pateikė Pablo Alsina 21 rug. 2008-08-21 18:49 '08 at 18:49 PM 2008-08-21 18:49

Įdomi alternatyva kometoms yra „Flash“ lizdų naudojimas.

4
19 сент. Gilles atsakė 19 Sep. 2008-09-19 00:13 '08 0:13 2008-09-19 00:13

Kitas standartinis metodas yra SSE (serverio siunčiami įvykiai, taip pat žinomi kaip EventSource , po „JavaScript“ objekto).

4
10 марта '15 в 20:25 2015-03-10 20:25 atsakymą Petras V pateikė kovo 15 d. 15 val. 20:25 2015-03-10 20:25

Kometą sukūrė Alex Russell iš Dojo Toolkit ( http://www.dojotoolkit.org ). Čia yra nuoroda į daugiau informacijos http://cometdproject.dojotoolkit.org/

3
03 сент. Atsakymą pateikė Mike Schall 03 Sep. 2008-09-03 06:42 '08 at 6:42 2008-09-03 06:42

Yra ir kitų metodų. Nežinote, ar jūsų situacija yra „geresnė“. Galite turėti „Java“ programėlę, kuri prisijungia prie serverio, kai puslapis įkeliamas ir laukia, kol serveris išsiųs medžiagą. Paleidimo metu būtų šiek tiek lėčiau, bet leistų naršyklei retai gauti duomenis iš serverio be apklausos.

1
21 авг. Atsakymas pateikiamas Kibbee 21 rug. 2008-08-21 17:09 '08 at 17:09 2008-08-21 17:09

Galite naudoti „Flash“ / „Flex“ programą klientui su „BlazeDS“ arba „LiveCycle“ serverio pusėje. Duomenys gali būti perduoti klientui naudojant RTMP ryšį. Atminkite, kad RTMP naudoja nestandartinį prievadą. Tačiau, jei uostas yra užblokuotas, galite lengvai grįžti į apklausą.

1
20 нояб. Atsakymas pateikiamas Buzzy 20 lapkričio. 2008-11-20 19:23 '08 at 7:23 pm 2008-11-20 19:23

Gali būti verta patikrinti „ Meteor“ serverį , kuris yra „COMET“ skirtas serveris. Gražus demo ir „ Twitterfall“ .

1
05 марта '09 в 21:40 2009-03-05 21:40 atsakymas pateiktas BigJump kovo 05'09 , 21:40 2009-03-05 21:40

Galima pasiekti tai, ko siekiate naudojant nuolatines http jungtis.

Pažvelkite į cometary straipsnį apie wikipedia, kokia gera vieta pradėti.

Neturite daug informacijos, tačiau jei planuojate sukurti tam tikrą įvykį orientuotą svetainę (a'la digg spy) arba kažką panašaus, tikriausiai ieškosite paslėpto IFRAME, kuris prisijungia prie URL adreso, kur ryšys niekada nesibaigia, o tada spustelėsite scenarijų-žinutes iš serverio klientui, kad atliktumėte naujinimus.

1
21 авг. Markus Olsson atsakymas 21 rugpjūtis 2008-08-21 17:11 '08 at 17:11 pm 2008-08-21 17:11

Galite išbandyti mūsų kometinį komponentą - nors tai labai eksperimentinė ...!

0
20 нояб. Thomas Hansen atsakymas lapkričio 20 d 2008-11-20 12:28 '08, 12:28 2008-11-20 12:28

Kai ryšys atidarytas serveryje, galite jį atidaryti, o serveris gali spustelėti turinį, o atgal, kai naudoju multipart/x-mixed-replace , tačiau tai neveikė IE.

Manau, kad jūs galite padaryti protingus dalykus su apklausa, todėl jis dirba daugiau nei stumti, nesiųsti turinio nekeičiant, bet paliekant ryšį atvirą, bet aš niekada to nepadariau.

0
21 авг. atsakymas pateikiamas sparkes 21 rug . 2008-08-21 17:09 '08 at 17:09 2008-08-21 17:09

Jei norite sužinoti, kaip dinamiškai perkelti duomenis į klientus, kai jie tampa prieinami, patikrinkite šią biblioteką https://github.com/SignalR/SignalR .

0
24 марта '13 в 15:17 2013-03-24 15:17 atsakymas į arun peddakotla pateikiamas kovo 13 d. 13, 15:17 2013-03-24 15:17

Galbūt norėsite žiūrėti „ ReverseHTTP“ .

-1
19 марта '09 в 11:40 2009-03-19 11:40 atsakė Evanui kovo 19 d., 09:40, 2009-03-19 11:40

Taip pat galite pamatyti java mygtukus, jei naudojate jsp puslapius.

-1
21 авг. Ryan Ahearn atsakymas 2008-08-21 17:10 '08 at 5:10 pm 2008-08-21 17:10

Kiti klausimai apie žymes arba Užduoti klausimą