Cum se afișează / actualizează Îi place Facebook Utilizând Node.js
Prin elaborarea codurilor de eșantion din postul anterior, s-ar putea să aveți sentimentul de fapt care este beneficiul real al utilizării Node.js. În postarea de astăzi, lansăm un script practic care demonstrează în mod clar utilizarea Node.js în programarea bazată pe evenimente.
Vom crea un script simplu care va afișa numărul de "plăceri Facebook" ale unei anumite pagini de pe Facebook. În plus, vom lansa o caracteristică suplimentară care va actualiza numărul de "plăceri Facebook" la fiecare 2 secunde.
Rezultatul va fi simplu si simplu, probabil arata cam asa: "Numarul de Likes: 2630405" si depinde de dumneavoastra sa-l stilizati folosind CSS, sa incepem atunci!
Să vă dau o idee
Înainte de a ne arunca cu ajutorul Node.js, să luăm un moment pentru a gândi ceea ce l-am face în mod normal cu limbi de programare obișnuite de pe server (cum ar fi PHP). Dacă vă gândiți să faceți un apel AJAX pentru a găsi numărul de îi place în fiecare 2 secunde - sunteți corect - dar acest lucru poate ar putea creste potențialul serverului.
Putem considera accesarea graph.facebook.com care ar fi a consumatoare de timp I / O. Luați în considerare 5 utilizatori care accesează aceeași pagină (care emite numărul îi place). Numărul de acces la graph.facebook.com în 2 secunde va deveni 10, pentru că toată lumea își va actualiza numărul îi place o dată în 2 secunde și asta va fi executat ca un fir separat.
Acest lucru nu este necesar cu implementarea unui server Node.js. Numai este necesar un acces la serverul Facebook si timp pentru a obține și de a ieși rezultatul (numărul de îi place) poate fi mult redus.
Cu toate acestea, cum vom implementa acest lucru? Asta vom afla în secțiunile de mai jos.
Noțiuni de bază
Înainte de a începe, ar trebui au Node.js instalat și rulează pe un cont de gazduire web care suportă mediul v8. Consultați subiectele "Noțiuni de bază cu Node.js" și "Instalarea Node.js" în articolul nostru precedent, Ghidul începătorului pentru Node.js dacă nu ați.
În server suntem acces graph.facebook.com
la un interval de 2 secunde și actualizați numărul îi place. Să numim acest lucru ca fiind "acțiune1"Vom pregăti o pagină astfel încât să se actualizeze prin AJAX la fiecare 2 secunde.
Luați în considerare mulți utilizatori care accesează aceeași pagină. Pentru solicitarea AJAX a fiecărui utilizator, pe server se atașează un ascultător de evenimente pentru completarea "ACTION1". Deci, ori de câte ori este finalizată "ACTION1", vor fi declanșați ascultătorii evenimentului.
Să aruncăm o privire la codul serverului.
Codurile:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = evenimente noi.EventEmitter (); funcția get_data () var request = facebook_client.request ("GET", "/ 19292868552", "gazdă": "graph.facebook.com"); request.addListener ("răspuns", funcția (răspunsul) var corp = ""; răspuns.addListener ("date", funcția (date) body + = data; ) var data = JSON.parse (corp); facebook_emitter.emit ("date", String (data.likes)););); request.end (); my_http.createServer (funcția (cerere, răspuns) var my_path = url.parse (request.url) .pathname; dacă (my_path === "/ getdata") var listener = facebook_emitter.once (date) answer.writeHeader (200, "Content-Type": "text / simplu"); reply.write (data); response.end (); ;). ascultați (8080); setInterval (get_data, 1000); sys.puts ("Server care rulează pe 8080");
Coduri Explicație:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = evenimente noi.EventEmitter ();
Noi creăm a Client HTTP pentru a accesa API-urile Facebook Graph facebook_client
. Avem nevoie de asemenea EventEmitter ()
care va declanșa atunci când "ACTION1" a fost finalizată.
Acest lucru va fi clar în codul descris mai jos.
funcția get_data () var request = facebook_client.request ("GET", "/ 19292868552", "gazdă": "graph.facebook.com"); request.addListener ("răspuns", funcția (răspunsul) var corp = ""; răspuns.addListener ("date", funcția (date) body + = data; ) var data = JSON.parse (corp); facebook_emitter.emit ("date", String (data.likes)););); request.end ();
Funcţie Obțineți date
preia datele din apelul API Facebook. Mai întâi creați o solicitare GET folosind cerere
metoda următoarei sintaxe:
Client.request ( 'GET', 'GET_URL', "gazdă": "host_url");
Numarul “19292868552” este ID-ul Facebook al paginii de care avem nevoie pentru a accesa detaliile sale. Deci, pagina finală pe care încercăm să o accesăm devine: http://graph.facebook.com/19292868552. După ce a făcut cererea, trebuie adaugă-i trei ascultători, respectiv următoarele:
- Raspuns - Acest ascultător este declanșat când cererea începe să primească date. Aici am stabilit corpul răspunsului la un șir gol.
- Date - Deoarece Node.js este asincron, datele sunt recepționate ca bucăți. Aceste date sunt adăugate în variabila corpului pentru a construi corpul.
- Sfârșit - Acest ascultător este declanșat când "ACTION1" specificat mai sus a fost finalizat. Datele returnate de apelul API pentru graficul Facebook returnează date în format JSON. Deci, vom transforma șirul în matrice JSON utilizând funcția JavaScript
JSON.parse
.
Puteți vedea că un ascultător este atașat pentru event_emitter
obiect. Noi trebuie să-l declanșezi la sfârșitul "ACTION1". Acționăm în mod explicit ascultătorul cu metoda facebook_emitter.emit
.
"id": "19292868552", "nume": "Platformă Facebook", "imagine": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "likes": 2738595, "category": "Produs / serviciu", "site": "http://developers.facebook.com", "username": "platformă", "fondată": "mai 2007", "company_overview": "Platforma Facebook permite oricui să construiască aplicații sociale pe Facebook și pe web.", "misiune": " "parcare": "strada": 0, "lot": 0, "valet": 0,
Cele de mai sus reprezintă răspunsul apelului API pentru Facebook Graph. Pentru a obține numărul de îi place: luați obiectul likes al obiectului de date, convertiți-l la șir și treci la emite
funcţie.
După această acțiune, noi Sfârșit
cererea.
(my_path === "/ getdata") var listener = facebook_emitter.once ("date", functie (cerere, raspuns) date) answer.writeHeader (200, "Tip de conținut": "text / simplu"); răspuns.write (date); ) ascultați (8080); setInterval (get_data, 1000);
Crearea serverului este similară tutorialului anterior - cu o mică schimbare. Pentru fiecare adresă URL (cu excepția /Obțineți date
) noi încărcați fișierul static corespunzător folosind load_file
funcţie am definit mai devreme.
http: // localhost: 8080 / GetData
este adresa URL a solicitării AJAX. În fiecare cerere AJAX, noi atașați un ascultător al evenimentului facebook_emitter
. Este similar cu addListener
dar ascultător este ucis după ce ascultătorul este emis pentru a evita o scurgere de memorie. Dacă trebuie să-l verificați inlocuieste o singura data
cu addListener
. De asemenea, sunăm Obțineți date
funcția o dată în 1 secundă de către funcție setInterval
.
Apoi, vom crea pagina HTML unde se afișează ieșirea.
Codurile:
Facebook Îmi place Număr de felicitări: Se incarca…
Coduri Explicație:
Partea jQuery AJAX este destul de explicativă. Verificați apelul load_content
funcţie. Se pare ca asta rulează o buclă infinită, și da. Numai așa îi place se actualizează.
Fiecare apel AJAX va fi amânată cu timpul mediu de 1 secundă deoarece întârzierea în declanșarea fiecărui astfel de apel va fi de 1 secundă de la server. Cererea AJAX va fi într-o formă incompletă pentru acea 1 secundă.
Deci, te duci - o metodă de întârziere a unui răspuns AJAX de la server pentru a obține numărul de Facebook îi place. Întrebați întrebarea în secțiunea noastră de comentarii dacă aveți vreo îndoială sau gândire, mulțumiți!
Nota editorului: Această postare este scrisă de Geo Paul pentru Hongkiat.com. Geo este un dezvoltator independent de Web / iPhone care se bucură de colaborarea cu PHP, Codeigniter, WordPress, jQuery și Ajax. Are 4 ani de experiență în PHP și 2 ani de experiență în dezvoltarea aplicațiilor iniPhone.