Ce sunt Long-Polling, Websockets, Evenimente trimise prin server (SSE) și Comet?

Am incercat sa citesc cateva articole, dar nu sunt foarte clar despre concepte inca.

Ar vrea cineva să ia o șansă să-mi explice ce înseamnă aceste tehnologii:

  1. Long Polling
  2. Evenimente trimise prin server
  3. WebSockets
  4. cometa </​​li>

Un lucru pe care l-am întâlnit de fiecare dată a fost că serverul menține o conexiune deschisă și împinge date către client. Cum se menține conexiunea deschisă și cum obține clientul datele împinse? (Cum utilizează clientul datele, poate că un cod ar putea ajuta?)

Acum, care dintre ele ar trebui să utilizez pentru o aplicație în timp real. Am auzit mult despre websockets (cu biblioteca socket.io [a node.js]), dar de ce nu PHP?

862
În plus, evenimentele Comet și ServerSent sunt soluția PHP de a realiza aproape realtime (nu într-adevăr) fără a crea 2 servere.
adăugat autor PauAI, sursa
Realtime websocket sau webrtc? Există o bibliotecă pentru websocket în PHP, trebuie să scrieți cod suplimentar pentru ca acesta să funcționeze folosind programarea ZMQ sau doar socket, nodeJs fiind construit pentru aceasta, astfel încât să fie ușor accesibil. Motivul websocket-ului nu este disponibil imediat în PHP este că trebuie să rulați un terminal suplimentar și să-l păstrați să fie difuzat astfel încât serverul websocket să fie disponibil imediat, veți avea două servere de bază. și structura, PHP nu este o structură de eveniment ca javascript, așa că acolo, websocket folosește o structur
adăugat autor PauAI, sursa

3 răspunsuri

În exemplele de mai jos clientul este browserul, iar serverul este serverul web care găzduiește site-ul.

Înainte de a înțelege aceste tehnologii, trebuie să înțelegeți mai întâi traficul web clasic HTTP.

Regulat HTTP:

  1. Un client solicită o pagină web dintr-un server.
  2. Serverul calculează răspunsul
  3. Serverul trimite răspunsul clientului.

HTTP

Ajax Polling:

  1. Un client solicită o pagină web dintr-un server utilizând HTTP obișnuit (consultați HTTP de mai sus).
  2. Clientul primește pagina web solicitată și execută JavaScript pe pagina care solicită un fișier de la server la intervale regulate (de exemplu, 0,5 secunde).
  3. Serverul calculează fiecare răspuns și îl trimite înapoi, la fel ca traficul HTTP normal.

Ajax Polling

Ajax Long-Polling:

  1. Un client solicită o pagină web dintr-un server utilizând HTTP obișnuit (consultați HTTP de mai sus).
  2. Clientul primește pagina web solicitată și execută JavaScript pe pagina care solicită un fișier de pe server.
  3. Serverul nu răspunde imediat la informațiile solicitate, dar așteaptă până când sunt disponibile informații noi .
  4. Când sunt disponibile informații noi, serverul răspunde la noile informații.
  5. Clientul primește noile informații și trimite imediat o altă solicitare serverului, relansând procesul.

Ajax Long-Polling

Șabloane trimise la serverul HTML5 (SSE)/EventSource:

  1. A client requests a webpage from a server using regular HTTP (see HTTP above).
  2. The client receives the requested webpage and executes the JavaScript on the page which opens a connection to the server.
  3. The server sends an event to the client when there's new information available.

    • Real-time traffic from server to client, mostly that's what you'll need
    • You'll want to use a server that has an event loop
    • Not possible to connect with a server from another domain
    • If you want to read more, I found these very useful: (article), (article), (article), (tutorial).

HTML5 SSE

Websocket-uri HTML5:

  1. A client requests a webpage from a server using regular http (see HTTP above).
  2. The client receives the requested webpage and executes the JavaScript on the page which opens a connection with the server.
  3. The server and the client can now send each other messages when new data (on either side) is available.

    • Real-time traffic from the server to the client and from the client to the server
    • You'll want to use a server that has an event loop
    • With WebSockets it is possible to connect with a server from another domain.
    • It is also possible to use a third party hosted websocket server, for example Pusher or others. This way you'll only have to implement the client side, which is very easy!
    • If you want to read more, I found these very useful: (article), (article) (tutorial).

HTML5 WebSockets

Cometă:

Cometul este o colecție de tehnici înainte de HTML5, care utilizează streaming și polling-ul lung pentru a realiza aplicații în timp real. Citiți mai multe pe wikipedia sau acest articol .


Acum, care dintre ele ar trebui să folosesc pentru o aplicație în timp real (de care trebuie să fac   cod). Am auzit mult despre websockets (cu socket.io [a   node.js library)), dar de ce nu PHP?

Puteți utiliza PHP cu WebSockets, consultați Ratchet .

1840
adăugat
Care este diferența reală între SSE și Websockets?
adăugat autor Basj, sursa
De ce crezi că nu folosești Apache?
adăugat autor bobzer, sursa
Nu am putut înțelege diferențele dintre comet și ajax long polling . În ambele tehnici, suntem (ca client) trimițând o cerere ajax și așteptăm cu o cerere HTTP deschisă pentru un răspuns de la server. @Leaga-ma
adăugat autor Eray, sursa
Q: în PHP să presupunem că utilizați websocket ar fi fiecare client conectat la serverul meu folosind ws: ar avea un thread alocat lui/ei și dimensiunea sa ar fi ~ 2mb ca în cazul cererilor normale? cum ar diferi nodej-urile? Câți clienți concurenți pot gestiona nodejurile și când se rupe ce se întâmplă?
adăugat autor Muhammad Umer, sursa
@Tieme Oh a fost că asta? Am crezut că SSE a însemnat Evenimente trimise la server. Oricum, mulțumesc, îl văd acum.
adăugat autor index, sursa
Asta e grozav! Eu citesc pe SSE si am gasit acest articol, este foarte frumos - ca si cum am comparat lucrurile acum, puteti include si SSE aici pentru a putea verifica si diferenta cu Websocket?
adăugat autor index, sursa
@Tieme Care va fi cea mai bună metodă de recuperare a datelor ca client pentru utilizatorii de Android de pe serverul Web-socket?
adăugat autor Apple Appala, sursa
Ar fi frumos dacă acest răspuns ar fi mai explicit cu privire la tehnologia de bază. Ce conexiuni TCP sunt utilizate? Există conexiuni secundare stabilite pe prima dintre cele folosite pentru a face cererea inițială? Cum este implicată conectarea HTTP?
adăugat autor Charlie, sursa
Puteți realiza același lucru cu ambele soluții, dar mecanismul este diferit. Semnalul de lungă durată folosește date http regulate, SSE folosește un protocol diferit și are nevoie de o configurare diferită a serverului în comparație cu o interogare lungă.
adăugat autor Tieme, sursa
@ Eray, ați citit ultimul paragraf și ați urmat urlul la mai multe informații despre cometă?
adăugat autor Tieme, sursa
Ei bine, ai putea folosi apache dacă vrei. Dar o mulțime de oameni folosesc Node.js deoarece are o buclă de evenimente. Dar pentru Apache, vedeți PHP nativ pentru prize web disponibil% 2312204603" > stackoverflow.com/questions/12203443/…
adăugat autor Tieme, sursa
Sunt de acord, aveți aceste cunoștințe sau cunoașteți un utilizator care face asta?
adăugat autor Tieme, sursa
Cred că ar trebui să fie: "clientul execută JavaScript pe pagină", ​​deci acesta este browserul, nu severul. Clar?
adăugat autor Tieme, sursa
l-ai prins ... un răspuns minunat
adăugat autor kunal, sursa
Îmi puteți sugera care protocol de Comet va fi folosit pentru MVC de primăvară.
adăugat autor Yasir Shabbir Choudhary, sursa
@Tieme Care este diferența dintre SSE și tragere lungă? Din cuvintele tale, ele sunt aproape la fel.
adăugat autor tomwang1013, sursa
Doar pentru a adăuga la ceea ce @Tieme a răspuns deja, limitele SSE și WS pot fi tratate după cum urmează: Problema de reconectare WS poate fi rezolvată utilizând o bibliotecă de client corespunzătoare, de exemplu minunat-websocket . Problema de server SSE încrucișată poate fi rezolvată de trimiterea antetelor CORS în răspuns
adăugat autor Piyush Kansal, sursa
Cred că Pollingul lung (și probabil și cometa prea) va fi limitat de infrastructura de rețea care impune scurtarea timpului de expirare pe HTTP.
adăugat autor Ced, sursa
@Tieme Am fost pierdut cu explicația dvs. în punctul în care explicați despre Ajax Polling și ați spus: "Un client solicită o pagină Web de la un server utilizând HTTP obișnuit (a se vedea HTTP de mai sus) și apoi pagina Web solicitată execută JavaScript ... "Cum execută un server web obișnuit (de exemplu, apache)" execută JavaScript "?
adăugat autor Olowookere Emmanuel, sursa

Tieme a depus mult efort în răspunsul său excelent, dar cred că nucleul întrebării privind PO este modul în care aceste tehnologii se referă la PHP, mai degrabă decât modul în care funcționează fiecare tehnologie.

PHP este cel mai utilizat limbaj în dezvoltarea web-ului, pe lângă clientul evident html, CSS și javascript. Cu toate acestea, PHP are două probleme majore atunci când vine vorba de aplicații în timp real:

1) PHP a început ca un CGI foarte simplu. PHP a progresat foarte departe de la începutul etapei, dar sa întâmplat în pași mici. PHP avea deja multe milioane de utilizatori până în momentul în care a devenit biblioteca C încorporabilă și flexibilă pe care o deține astăzi, majoritatea fiind dependente de modelul de execuție anterior, deci nu a făcut încă o încercare solidă de a scăpa de cgi model intern. Chiar și interfața de linie de comandă invocă biblioteca PHP (libphp5.so pe linux, php5ts.dll pe ferestre, etc) ca și cum ar fi încă un proces cgi de procesare a unei cereri GET/POST. Încă mai execută codul ca și cum ar trebui să construiască o "pagină" și apoi să-și încheie ciclul de viață. În consecință, are un sprijin foarte redus pentru programarea multi-thread sau a evenimentelor (în cadrul spațiului de lucru al PHP), ceea ce îl face în prezent nepractic pentru aplicații multi-utilizator în timp real.

Rețineți că PHP are extensii pentru a furniza bucle de evenimente (cum ar fi libevent) și fire (cum ar fi pthreads) în spațiul de utilizator PHP, dar foarte, foarte puține dintre aplicații le utilizează.

2) PHP are încă probleme importante cu colectarea gunoiului. Deși aceste probleme s-au îmbunătățit în mod constant (probabil că este cel mai mare pas pentru a pune capăt ciclului de viață așa cum este descris mai sus), chiar și cele mai bune încercări de a crea aplicații PHP îndelungate necesită repornirea regulată. Acest lucru îl face, de asemenea, nepractic pentru aplicațiile în timp real.

PHP 7 va fi un mare pas pentru a rezolva aceste probleme, și pare foarte promițătoare ca platformă pentru aplicațiile în timp real.

31
adăugat
PHP 7 pare foarte promițător ca platformă pentru aplicațiile în timp real? Ce îmbunătățire/schimbare în PHP7 pentru aplicațiile în timp real?
adăugat autor I'll-Be-Back, sursa
O mică corecție: PHP a fost întotdeauna scrisă în C, așa cum se poate vedea aici: museum.php.net/php1 De asemenea, "mai puțin folosită (dar foarte populară)" este mai degrabă auto-contradictorie; poate că ceea ce spui este "mai la modă"?
adăugat autor IMSoP, sursa
de asemenea, svn.php. net/viewvc/phpdoc/ro/trunk/appendices/& hellip; && PHP "rel =" nofollow noreferrer "> pagina web.archive.org/web/20090426061624/http://us3.php.net/…
adăugat autor eis, sursa
adăugat autor eis, sursa
@ I'll-Be-Back - gestionarea memoriei fixe/colectarea gunoiului, compilarea JIT etc.
adăugat autor JSON, sursa
Voi elimina puținul despre Perl, deoarece nu se amestecă bine cu documentația oficială, dar aceasta este încă o zonă confuză în dezvoltarea timpurie a PHP.
adăugat autor JSON, sursa
@IMSoP - Vă mulțumim pentru corecție, am folosit PHP de peste un deceniu și am fost întotdeauna sub impresia că rădăcinile sale erau în Perl. Pagina istorie din PHP susține în mod clar că a fost inițial și C. Voi edita răspunsul meu odată ce voi găsi un moment.
adăugat autor JSON, sursa
Editați răspunsul dvs. cu privire la rădăcinile php.
adăugat autor Netverse, sursa

Am încercat să notez aceste lucruri și am colectat și scrise exemple dintr-o perspectivă java .

HTTP pentru dezvoltatorii Java

Reverse Ajax - stil vechi

Async Handling pe partea de server

Reverse Ajax - stil nou

Evenimente trimise prin server

Punându-l aici pentru orice dezvoltator de java care se uită în același subiect.

7
adăugat
Toate legăturile sunt acum moarte
adăugat autor SpringLearner, sursa
@SpringLearner vă mulțumesc că ați observat-o. Am actualizat legăturile
adăugat autor John, sursa
PHP România, Moldova
PHP România, Moldova
167 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT

PHP jobs, România, Moldova
PHP jobs, România, Moldova
88 participanți

Parteneri: ciupacabra.com Toate grupurile IT: @Grupuri_IT