Kako prikazati / ažurirati Facebook voli Koristeći Node.js
Izradivši uzorke kodova iz prethodnog posta, možda ste dobili osjećaj o tome koja je stvarna korist od korištenja Node.js. U današnjem postu stavljamo praktičnu skriptu koja jasno demonstrira korištenje Node.js u programiranju temeljenom na događajima.
Stvorit ćemo jednostavnu skriptu koja prikazuje broj "voli Facebook" na određenoj Facebook stranici. Povrh toga, ubacit ćemo dodatnu značajku koja će ažurirati broj "voli na Facebooku" svake 2 sekunde.
Izlaz će biti jednostavan i jednostavan, vjerojatno izgleda ovako: "Broj Likes: 2630405" i na vama je da ga stilizirate pomoću CSS-a, počnimo onda!
Da vam da ideju
Prije nego što uđemo u korištenje Node.js, uzmimo trenutak da razmislimo što bi to inače činili s uobičajenim programskim jezicima na strani poslužitelja (kao što je PHP). Ako razmišljate napraviti AJAX poziv kako biste pronašli broj sviđa svakih 2 sekundi - u pravu ste - ali ovo može potencijalno povećati opterećenje poslužitelja.
Možemo razmotriti Pristupom graph.facebook.com što bi bilo dugotrajna U / I operacija. Razmotrite 5 korisnika koji pristupaju istoj stranici (koja daje broj sviđa). Broj pristupa graph.facebook.com za 2 sekunde postat će 10, jer će svi ažurirati svoj broj sviđa jednom u 2 sekunde i to izvršit će se kao zasebna nit.
To nije potrebno s implementacijom Node.js poslužitelja. Samo potreban je jedan pristup Facebook poslužitelju i vrijeme za dobivanje i ispis rezultata (broj sviđa) može se znatno smanjiti.
Međutim, kako ćemo to provesti? To ćemo saznati u donjim odjeljcima.
Početak rada
Prije nego što počnemo, trebala bi imate instaliran i pokrenut Node.js na v8 okruženju web hosting računa s podrškom za okoliš. Pogledajte teme "Početak rada s Node.js" i "Instaliranje Node.js" u prethodnom članku, Vodič za početnike za Node.js ako niste.
U poslužitelju mi pristup graph.facebook.com
u razmaku od 2 sekunde i ažurirajte broj sviđa. Nazovimo to kao "ACTION1"Pripremit ćemo stranicu tako da se ažurira putem AJAX-a svake 2 sekunde.
Razmotrite brojne korisnike koji pristupaju istoj stranici. Za AJAX zahtjev svakog korisnika slušatelj događaja pridružen je poslužitelju za dovršetak "ACTION1". Dakle, kad god se završi "ACTION1", pokreću se slušatelji događaja.
Pogledajmo kod poslužiteljske strane.
Kodovi:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = novi događaji.EventEmitter (); funkcija get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("odgovor", funkcija (odgovor) var body = ""; response.addListener ("podaci", funkcija (podaci) body + = data;); response.addListener ("kraj", funkcija ( ) var data = JSON.parse (tijelo); facebook_emitter.emit ("podaci", String (data.likes)););); request.end (); my_http.createServer (funkcija (zahtjev, odgovor) var my_path = url.parse (request.url) .pathname, ako (my_path === "/ getdata") var listener = facebook_emitter.once ("podaci", "funkcija" (data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response) poslušati (8080); setInterval (get_data, 1000); sys.puts ("Poslužitelj na 8080");
Objašnjenja kodova:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = novi događaji.EventEmitter ();
Stvaramo HTTP klijent za pristup API-ju usluge Google Graph facebook_client
. Također nam je potrebno EventEmitter ()
koja će se aktivirati kada se "ACTION1" dovrši.
To će biti jasno u dolje opisanom kodu.
funkcija get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("odgovor", funkcija (odgovor) var body = ""; response.addListener ("podaci", funkcija (podaci) body + = data;); response.addListener ("kraj", funkcija ( ) var data = JSON.parse (tijelo); facebook_emitter.emit ("podaci", String (data.likes)););); request.end ();
Funkcija get_data
dohvaća podatke iz Facebook API poziva. Prvo smo stvoriti GET zahtjev koristiti zahtjev
metoda sljedeće sintakse:
Client.request ( 'dobiti' 'GET_URL' "host": "host_url");
Broj “19292868552” je Facebook ID stranice koju trebamo pristupiti njegovim detaljima. Posljednja stranica koju pokušavamo pristupiti postaje: http://graph.facebook.com/19292868552. Nakon što smo napravili zahtjev, trebamo dodajte mu tri slušatelja, odnosno sljedeće:
- Odgovor - Ovaj slušatelj se aktivira kada zahtjev počne primati podatke. Ovdje postavljamo tijelo odgovora na prazan niz.
- Podaci - Kako je Node.js asinkroni, podaci se primaju kao dijelovi. Ovi podaci se dodaju u tijelo varijablu za izgradnju tijela.
- Kraj - Ovaj se slušatelj pokreće kada je gore navedeno "ACTION1". Podaci vraćeni pozivom API-ja za Google Graf vraćaju podatke u JSON formatu. Tako konvertiramo string u JSON niz pomoću JavaScript funkcije
JSON.parse
.
Možete vidjeti da je slušatelj priključen za event_emitter
objekt. Mi trebate ga aktivirati na kraju "ACTION1". Pokrećemo slušatelja eksplicitno metodom facebook_emitter.emit
.
"id": "19292868552", "name": "Facebook platforma", "slika": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "veza": "https://www.facebook.com/platform", "likes": 2738595, "category": "Product / service", "website": "http://developers.facebook.com", "username": "platforma", "osnovana": "Svibanj 2007", "company_overview": "Facebook platforma omogućuje svakome da gradi društvene aplikacije na Facebooku i webu.", "misija": "Da bi web učinio otvorenijim i društvenim.", "parking": "street": 0, "lot": 0, "valet": 0,
Gore navedeno predstavlja odgovor na poziv API-ja za Google Graf. Da biste dobili broj sviđa: uzeti objekt voli objekta podataka, pretvoriti ga u string i proslijedite ga ispuštati
funkcija.
Nakon ove akcije mi kraj
zahtjev.
my_http.createServer (funkcija (zahtjev, odgovor) var my_path = url.parse (request.url) .pathname, ako (my_path === "/ getdata") var listener = facebook_emitter.once ("data", function ( data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response); ) poslušajte (8080); setInterval (get_data, 1000);
Stvaranje poslužitelja slično je prethodnom vodiču - uz malu promjenu. Za svaki URL (osim / GetData
) mi učitajte odgovarajuću statičku datoteku pomoću load_file
funkcija smo definirali ranije.
http: // localhost: 8080 / GetData
je URL za AJAX zahtjev. U svakom AJAX zahtjevu mi pridružite slušatelju događaja facebook_emitter
. Slično je i addListener
ali slušatelj je ubijen nakon što se slušatelj emitira kako bi se izbjeglo curenje memorije. Ako trebate samo provjeriti zamijenite jednom
s addListener
. Također zovemo get_data
funkciju jednom u 1 sekundi setInterval
.
Zatim kreiramo HTML stranicu na kojoj se prikazuje izlaz.
Kodovi:
Facebook voli Broj omiljenih: Učitavam…
Objašnjenja kodova:
JQuery AJAX dio je sam po sebi razumljiv. Provjerite poziv load_content
funkcija. Izgleda tako pokreće beskonačnu petlju, i da jeste. Tako broj sviđa ažurira se.
Svaki AJAX poziv će se odgoditi za prosječno vrijeme od 1 sekunde jer će kašnjenje u pokretanju svakog takvog poziva biti 1 sekunda od poslužitelja. AJAX zahtjev će biti u nepotpunom obliku za tu 1 sekundu.
Dakle, idete - metoda odgađanja AJAX odgovora od poslužitelja da biste dobili broj Facebooka sviđa. Ako imate bilo kakve sumnje ili pomisli, ispustite pitanje u našoj sekciji za komentare, hvala!
Napomena urednika: Ovaj post je napisao / la Geo Paul za Hongkiat.com. Geo je nezavisni Web / iPhone programer koji uživa u radu s PHP-om, Codeigniter-om, WordPress-om, jQuery-jem i Ajax-om. On ima 4 godine iskustva u PHP-u i 2 godine iskustva u razvoju aplikacija iIPhone.