Kuidas näidata / uuendada „Facebooki meeldivaid“ Node.js'i abil
Eelmise postituse näidiskoodide välja töötamisel võite tunda, milline on tegelik kasu Node.js. Tänases postituses visame praktilise skripti, mis näitab selgelt Node.js'i kasutamist sündmustel põhinevas programmeerimises.
Loome lihtsa skripti, mis väljastab konkreetse Facebooki lehe „Facebooki meeldib”. Ja peale selle visame lisavõimaluse, mis uuendab "Facebooki meeldib" iga 2 sekundi järel.
Väljund on lihtne ja tavaline, ilmselt näeb välja midagi sellist: "Meeldivuste arv: 2630405" ja see on sinu otsustada, kasutades seda CSS-i abil, alustame siis!
Anda teile idee
Enne kui me sukeldume Node.js'i kasutamisse, mõelgem hetkeks, mida me tavaliselt tavaliste serveripoolsete programmeerimiskeelte (nt PHP) abil teeme. Kui mõtlete, et teha AJAX-i kõne, et leida number meeldib iga 2 sekundi järel - olete õige - kuid see võib olla potentsiaalselt suurendada serveri üldkulusid.
Me võime kaaluda juurdepääs graph.facebook.com mis oleks a aeganõudev I / O operatsioon. Kaaluge 5 kasutajat, kes pääsevad samale lehele (mis väljastab selle arvu) meeldib). Juurdepääsu arv graph.facebook.com 2 sekundi pärast muutub 10, sest igaüks uuendab oma numbrit meeldib üks kord 2 sekundi jooksul täidetakse eraldi lõimena.
See ei ole vajalik Node.js serveri rakenduse puhul. Ainult vajalik on juurdepääs Facebooki serverile ja aeg saada ja väljendada tulemust (. \ t meeldib) saab oluliselt vähendada.
Kuid kuidas me seda rakendame? See on see, mida me allpool toodud jaotistes selgitame.
Alustamine
Enne kui alustame, peaks teie peaks on installitud ja töötab Node.js v8 keskkonnakaitsega web hosting kontol. Vaadake teemasid: "Alustamine Node.jsiga" ja "Installimine Node.js" meie eelmises artiklis, algaja juhendis Node.js'ile, kui te pole.
Serveris me juurdepääs graph.facebook.com
2 sekundi järel ja värskendage meeldib. Kutsume seda kui "TEGEVUS1". Me koostame lehe nii, et see uuendab ennast AJAXi kaudu iga 2 sekundi tagant.
Mõtle paljudele kasutajatele, kes pääsevad samale lehele. Iga kasutaja AJAX päringu jaoks on serveril lisatud "ACTION1" lõpetamiseks sündmuste kuulaja.. Seega, kui "ACTION1" on lõpetatud, käivitatakse ürituse kuulajad.
Vaatame serveripoolset koodi.
Koodid:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = uued sündmused.EventEmitter (); funktsioon get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("vastus", funktsioon (vastus) var body = ""; response.addListener ("andmed", funktsioon (andmed) body + = data;); response.addListener ("lõpp", funktsioon ( ) var data = JSON.parse (keha); facebook_emitter.emit ("andmed", stringid (data.likes)););); request.end (); my_http.createServer (funktsioon (päring, vastus) var my_path = url.parse (request.url) .pathname; kui (my_path === "/ getdata") var listener = facebook_emitter.once ("andmed", funktsioon (data) response.writeHeader (200, "Sisu tüüp": "text / plain"); vastuse kirjutamine (andmed); vastus.end ();); muu load_file (my_path, vastus) ;) kuula (8080); setInterval (get_data, 1000); sys.puts ("Serveri töö 8080");
Koodid Selgitus:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = uued sündmused.EventEmitter ();
Loome a HTTP klient juurdepääsuks Facebooki graafik API-dele facebook_client
. Meil on vaja ka EventEmitter ()
funktsioon, mis käivitub, kui "ACTION1" on lõpetatud.
See on selge allpool kirjeldatud koodis.
funktsioon get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("vastus", funktsioon (vastus) var body = ""; response.addListener ("andmed", funktsioon (andmed) body + = data;); response.addListener ("lõpp", funktsioon ( ) var data = JSON.parse (keha); facebook_emitter.emit ("andmed", stringid (data.likes)););); request.end ();
Funktsioon get_data
tõmbab andmed Facebook API kõnest. Me kõigepealt loo GET-päring kasutades taotluse
järgmise süntaksi meetod:
Client.request ('GET', 'get_url', "host": "host_url");
Number “19292868552” on selle lehe Facebooki ID, millele peame oma üksikasjadele juurde pääsema. Seega muutub viimane leht, millele me püüame juurde pääseda: http://graph.facebook.com/19292868552. Pärast taotluse esitamist peame lisage sellele kolm kuulajat, vastavalt:
- Vastus - See kuulaja käivitub, kui päring alustab andmete vastuvõtmist. Siin me paneme vastuse tühjale stringile.
- Andmed - Kuna Node.js on asünkroonne, võetakse andmed vastu tükkidena. Need andmed lisatakse keha muutmiseks keha muutmiseks.
- Lõpp - See kuulaja käivitub, kui ülaltoodud "ACTION1" on lõpetatud. Facebook Graph API kõne tagastatud andmed tagastavad andmed JSON-vormingus. Nii teisendame JavaScript funktsiooni abil JSON-massiivi
JSON.parse
.
Näete, et kuulaja on lisatud event_emitter
objekti. Me vajadus käivitada see "ACTION1" lõpus. Me käivitame kuulaja otseselt meetodiga facebook_emitter.emit
.
"id": "19292868552", "nimi": "Facebook platvorm", "pilt": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "meeldib": 2738595, "kategooria": "Toote / teenus", "veebileht": "http://developers.facebook.com", "kasutajanimi": "platvorm", "rajatud": "mai 2007", "company_overview": "Facebook platvorm võimaldab igaühel luua sotsiaalseid rakendusi Facebookis ja veebis.", "missioon": "Veebi avatumaks ja sotsiaalsemaks muutmiseks." "parkimine": "tänav": 0, "partii": 0, "valet": 0,
Ülaltoodud on Facebooki graafiku API kõne vastus. Et saada number meeldib: võtke andmesobjekti sarnane objekt, teisendage see stringiks ja edastage see eraldama
funktsiooni.
Pärast seda me teeme lõpp
palve.
my_http.createServer (funktsioon (päring, vastus) var my_path = url.parse (request.url) .pathname; kui (my_path === "/ getdata") var listener = facebook_emitter.once ("andmed", funktsioon ( data) response.writeHeader (200, "Content-Type": "text / plain"); vastuse kirjutamine (andmed); vastus.end ();); other load_file (my_path, vastus); ) kuula (8080); setInterval (get_data, 1000);
Serveri loomine on sarnane eelmisele juhendile - väikese muutusega. Iga URL-i kohta (va / getdata
) me laadige vastav staatiline fail kasutades load_file
funktsiooni me määratlesime varem.
The http: // localhost: 8080 / getdata
on AJAXi taotluse URL. Igas AJAX-is palume meil lisage sündmuste kuulaja facebook_emitter
. See on sarnane addListener
aga kuulaja mälestuse lekke vältimiseks surmatakse pärast kuulaja väljastamist. Kui teil on vaja seda lihtsalt kontrollida asendada üks kord
koos addListener
. Me nimetame ka seda get_data
funktsioon toimib üks kord sekundis setInterval
.
Seejärel loome HTML-lehekülje, kus väljund kuvatakse.
Koodid:
Facebook meeldib Tippide arv: Laadimine…
Koodid Selgitus:
JQuery AJAX osa on üsna iseenesestmõistetav. Saate vaadata väljakutse load_content
funktsiooni. See näeb välja töötab lõpmatu silmusega, ja jah see on. See on nii meeldib uuendatakse ennast.
Iga AJAX-kõne viibib keskmiselt 1 sekundi võrra kui iga sellise kõne käivitamise viivitus on serverist 1 sekund. AJAX-i taotlus on selle 1 sekundi jooksul ebatäielik.
Nii et sa lähed - meetod AJAXi vastuse edasilükkamiseks serverilt Facebooki arvu saamiseks meeldib. Kui teil on mingeid kahtlusi või mõtteid, siis jätke küsimus meie kommentaaride jaotisest välja!
Toimetaja märkus: See postitus on kirjutatud Geo Paul Hongkiat.com jaoks. Geo on sõltumatu veebi / iPhone arendaja, kes naudib koostööd PHP, Codeigniter, WordPress, jQuery ja Ajax. Tal on 4-aastane kogemus PHP-s ja 2-aastane kogemus telefonirakenduste arendamisel.