HTML5, socketuri web

Evenimente Server discutate anterior, este instrumentul ideal atunci când doriți să obțineți o secvență de mesaje de la un server web. Dar această conexiune este obținută în întregime o singură față. Browser-ul nu poate răspunde sau se alăture într-un dialog complex cu serverul.

Dacă creați o aplicație web, care necesită grave browser-ul de cooperare bilaterală la serverul de web, cea mai bună abordare pentru a pune în aplicare ea (fără ajutorul Flash) va folosi, probabil, obiectul XMLHttpRequest. În funcție de tipul de aplicație, această abordare poate să nu funcționeze așa cum se dorește. Dar aici există un număr suficient de probleme potențiale.

În primul rând, obiectul XMLHttpRequest nu este potrivit pentru mesaje multiple rapide (de exemplu, chat). Apoi, nu este posibil să se asocieze un apel la altul, astfel încât de fiecare dată când solicitați o pagină web de pe server ar trebui să fie calculată de la început, căruia îi aparține această pagină. Prin urmare, nivelul de complexitate a codului pentru procesarea unui număr de interogări similare dintr-o pagină Web poate creste rapid la aproape irealizabil.

Pentru toate aceste probleme au o soluție, deși nu este încă destul de pregătit. Această soluție este o tehnologie Sockets Web (prize web). care permite browser-ul pentru a menține o conexiune deschisă la mesajele de server și de schimb în termen de orice moment dorit.

Tehnologia Sockets Web a provocat o mare entuziasm în mediul de dezvoltare web, dar este încă în dezvoltare, deși are o compatibilitate bună de browser:

Browser Suport Sockets Web

În momentul de față, cel mai bine este de a testa paginile folosind socketuri web, browser-ul Chrome, care oferă sprijin mai consistent pentru ei.

Obținerea de acces la mufele Web

Pentru a utiliza socketuri web la serverul web al site-ului dvs. un program special care urmează să fie executat, care este de așteptat să fie numit serverul WebSocket. Acest program este responsabil de coordonarea interacțiunii tuturor participanților, și după rularea funcționează non-stop.

Multe companii de hosting nu permit programe de lungă durată, cu excepția cazului în care îl plătiți pentru un server de web dedicat, și anume serverul, servind doar site-ul dumneavoastră. Dacă aveți un shared hosting convențional, cel mai probabil, nu va putea posta pe ea pagini care utilizează socketuri web. Chiar dacă ați reușit să rulați un socket server web și păstrați-l în stare de lucru, proprietarul dvs. de găzduire va dezvălui probabil și în afara.

Pentru a vă da o idee despre amploarea serverului web-socket, ia în considerare unele dintre sarcinile pe care serverul de soclu trebuie să efectueze:

compila „dicționar“ mesaj, cu alte cuvinte, să decidă ce tipuri de mesaje sunt valabile și care nu sunt;

conține o listă cu toți clienții conectați în prezent;

identificarea erorilor la trimiterea de mesaje către clienți și să nu mai încerce să-i contacteze, în cazul în care se pare că acestea nu mai sunt acolo;

prelucrează toate datele din memorie, adică, date, la care accesul poate solicita tuturor clienților, și să o facă în condiții de siguranță și sigur. Aici există o abundență de oportunități de probleme implicite, de exemplu, atunci când un client încearcă să se alăture schimbul, în timp ce celălalt este oprit, iar informațiile sunt stocate în ambele același obiect în memorie.

O altă abordare ar fi de a lua codul de server websocket altcuiva, și adaptarea acesteia pentru a se potrivi cerințelor dumneavoastră. În prezent, există un număr mare de proiecte (dintre care multe sunt o sursă liberă și deschisă), care a dezvoltat un web-socket servere pentru diferite sarcini, în diferite limbi ale software-ului de server.

Simplu WebSocket Client

Din perspectiva Web Sockets web funcționalitate pagina ușor de înțeles și de utilizat. Primul pas - este de a crea un obiect WebSocket și să treacă în URL-ul. Codul pentru acest lucru este similar cu următorul:

string URL-ul începe cu Ws de text: //, care identifică tipul de conexiune socket-ul web. Acest URL trimite la un fișier aplicație web pe server (în acest caz, scenariu socketServer.php).

prize Web pot fi conectate nu numai la serverul web. Pagina web poate deschide o conexiune la un server care rulează soclu web de pe un server de web diferit, fără a necesita nici un efort suplimentar.

Simplul fapt de a crea obiect WebSocket forțează pagina pentru a încerca să se conecteze la server. Apoi, este necesar să se utilizeze una dintre cele patru evenimente WebSocket obiecta: onOpen (cu o conexiune), onerror (atunci când apare o eroare), onClose (atunci când închideți conexiunea) și onMessage (când pagina primește un mesaj de la server):

De exemplu, în cazul unei conexiuni de succes ar fi frumos pentru a trimite un mesaj de confirmare corespunzătoare. Un astfel de mesaj este livrat folosind metoda send () WebSocket obiect text simplu este trecut ca parametru. Ceea ce urmează este o funcție care se ocupă de evenimentul onopen și trimite mesajul:

Probabil, serverul web primește acest mesaj și să dea un răspuns.

Dacă o pagină web decide că toate lucrările sale se face, se poate închide conexiunea utilizând metoda de deconectare ().

Din această recenzie, prize de web, puteți vedea că utilizarea unui server WebSocket terță parte nu prezintă dificultăți - noi trebuie doar să știm ce mesaj pentru a trimite, și ce - să se aștepte.

Pentru a face conexiunea de Web Sockets de lucru se face o mulțime de muncă în spatele scenei. În primul rând, pagina Web comunică prin HTTP standard, de obicei. Apoi, este necesar să se mărească conexiunea la conectarea socketuri web, permițând o comunicare liberă în ambele sensuri. În acest stadiu, pot exista probleme în cazul în care există un server proxy (cum ar fi, de exemplu, într-o rețea corporativă tipică) între computerul client și server-ul Web. Serverul proxy poate refuza să coopereze și rupe conexiunea. Această problemă poate fi rezolvată prin detectarea unei conexiuni proaste (prin evenimente onerror obiect WebSocket) și aplicarea uneia dintre agregate (polyfills) pentru prize descrise pe site-ul GitHub. Aceste materiale de umplutură sunt metoda de sondaj utilizat pentru a crea un prize de conexiune web.

Exemple prizelor de rețea Web

Dacă sunteți interesat să încercați socketuri web, rețeaua există multe site-uri unde puteți începe dezvoltarea ta.

Pentru a începe, încercați site-ul websocket.org. care oferă un simplu server de web-socket: Pagina web trimite un mesaj, și returnează aceeași pagină Web mesaj:

HTML5, socketuri web

Cu toate ca acest server soclu de web și nu reprezintă nimic special pe ea, puteți încerca toate caracteristicile obiectului WebSocket. Mai mult decât atât, acest server se poate conecta la pagina situat la atât serverul web comercial, și pentru a testa serverul web de pe computer, sau chiar din pagina, începe pur și simplu de pe hard disk:

Există servere, prize de web, oferă alte opțiuni, inclusiv următoarele:

chat-ul simplu. Chat, în care toate vorbesc cu toată lumea. Mesajele pe care le trimit tuturor participanților un chat.

album multiplayer. Această pagină reunește socketuri web cu HTML5 Canvas. Faptul că desenați pe panza dvs., panza este afișat pe ceilalți participanți, și vice-versa. Un concept simplu, dar este foarte impresionant în practică.

Servere WebSocket

Pentru a putea testa proiectul pe ștuțurile de web, aveți nevoie de un server de web-socket care pagina dvs. ar putea comunica. Test pentru server pot fi găsite în multe locuri. Mai jos sunt link-uri la un server socket-ul web pentru anumite limbi server-side:

Acest proiect simplu și ușor dampish va fi un bun punct de plecare pentru crearea de server de web-socket în PHP.

Există mai multe modele de web-server socket în Ruby, dar acest lucru, să aplice modelul „Event-mașină“, este deosebit de popular.

prize de server web ca un modul de extensie pentru Apache în Python.

Pur și simplu intitulat acest proiect nu poate fi atotcuprinzătoare. Dar ea conține un server complet de web-socket în C # pe platforma .NET de la Microsoft.

În domeniul de aplicare, acest proiect este similar cu proiectul .NET, ci pur și simplu în Java.