Kaip rodyti / atnaujinti „Facebook“ mėgstamiausius „Node.js“
Parengdami ankstesnių įrašų pavyzdžių kodus, gali būti jausmas, koks yra tikrasis „Node.js.“ naudojimo privalumas. Šiandieniniame pranešime mes įdėjome praktinį scenarijų, aiškiai parodantį „Node.js“ naudojimą renginiuose, kuriuose vyksta įvykiai.
Sukursime paprastą scenarijų, iš kurio gaunamas „Facebook like“ numeris tam tikrame „Facebook“ puslapyje. Be to, mes išmesti papildomą funkciją, kuri kas 2 sekundes atnaujins „Facebook like“ skaičių.
Išėjimas bus paprastas ir paprastas, tikriausiai atrodo kažką panašaus į: „Likes skaičius: 2630405“, o tai priklauso nuo to, kaip jį stilius naudoti naudojant CSS, pradėkime tada!
Duoti jums idėją
Prieš nardydami naudoti „Node.js“, leiskite šiek tiek laiko galvoti, ką mes paprastai atliktume su įprastomis serverio pusės programavimo kalbomis (pvz., PHP). Jei galvojate, kad norite skambinti AJAX, suraskite numerį mėgsta kas 2 sekundes - teisingai - bet tai gali gali padidinti serverio pridėtinę vertę.
Galime apsvarstyti prieiga graph.facebook.com kuris būtų a laiko reikalaujanti I / O operacija. Apsvarstykite 5 naudotojus, kurie naudojasi tuo pačiu puslapiu (kuris išleidžia skaičių mėgsta). Prieigos numeris graph.facebook.com per 2 sekundes taps 10, nes kiekvienas atnaujins savo numerį mėgsta kartą per 2 sekundes ir ji bus vykdomas kaip atskiras sriegis.
Tai nėra būtina naudojant „Node.js“ serverio diegimą. Tik reikalinga viena prieiga prie „Facebook“ serverio ir laikas gauti ir išleisti rezultatą (. \ t mėgsta) galima labai sumažinti.
Tačiau kaip mes ketiname tai įgyvendinti? Štai ką mes išsiaiškinsime toliau pateikiamuose skyriuose.
Darbo pradžia
Prieš pradėdami, jūsų turėtų turėti „Node.js“ įdiegtą ir veikiančią „V8“ palaikomą „web hosting“ paskyrą. Peržiūrėkite ankstesniame straipsnyje „Pradedančiųjų vadovas Node.js“ temas „Pradėkite naudoti„ Node.js “ir„ Įdiegti „Node.js“, jei neturite.
Serveryje mes prieigą graph.facebook.com
per 2 sekundes ir atnaujinti mėgsta. Pakvieskime tai kaip „VEIKSMAI1„Parengsime puslapį taip, kad jis per 2 sekundes pati atnaujinssi per AJAX.
Apsvarstykite daug vartotojų, kurie naudojasi tuo pačiu puslapiu. Kiekvieno vartotojo AJAX užklausoje serveryje yra pridedamas įvykio klausytojas, kad būtų užbaigtas „ACTION1“. Taigi, kai „ACTION1“ bus baigtas, renginio klausytojai bus paleisti.
Pažvelkime į serverio pusės kodą.
Kodai:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nauji įvykiai.EventEmitter (); funkcija get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("atsakymas", funkcija (atsakymas) var body = ""; response.addListener ("duomenys", funkcija (duomenys) body + = data;); response.addListener ("pabaiga", funkcija ( ) var data = JSON.parse (kūnas); facebook_emitter.emit („duomenys“, eilutė (data.likes)););); request.end (); my_http.createServer (funkcija (užklausa, atsakymas) var my_path = url.parse (request.url) .pathname; jei (my_path === "/ getdata") var listener = facebook_emitter.once ("duomenys", funkcija (data) response.writeHeader (200, "Turinio tipas": "text / plain"); atsakymo rašymas (duomenys); answer.end ();); kitas load_file (my_path, response) ;) klausyk (8080); setInterval (get_data, 1000); sys.puts („Serveris veikia 8080“);
Kodai Paaiškinimas:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nauji įvykiai.EventEmitter ();
Mes sukuriame a HTTP klientas pasiekti „Facebook Graph API“ facebook_client
. Mums taip pat reikia EventEmitter ()
funkcija, kuri bus pradėta, kai baigsis „ACTION1“.
Tai bus aišku toliau aprašytame kode.
funkcija get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("atsakymas", funkcija (atsakymas) var body = ""; response.addListener ("duomenys", funkcija (duomenys) body + = data;); response.addListener ("pabaiga", funkcija ( ) var data = JSON.parse (kūnas); facebook_emitter.emit („duomenys“, eilutė (data.likes)););); request.end ();
Funkcija get_data
atsiunčia duomenis iš „Facebook“ API kvietimo. Pirmiausia mes sukurti GET užklausą naudojant prašymas
šio sintaksės metodas:
Client.request ('GET', 'get_url', "host": "host_url");
Skaičius “19292868552” yra puslapio „Facebook“ ID, kuriam reikia prieiti prie jo detalių. Taigi galutinis puslapis, kurį bandome pasiekti, tampa: http://graph.facebook.com/19292868552. Atlikę užklausą, turime pridėti tris klausytojus, atitinkamai:
- Atsakas - Šis klausytojas įsijungia, kai prašymas pradeda priimti duomenis. Čia nustatome atsako į tuščią eilutę kūną.
- Duomenys - Kadangi „Node.js“ yra asinchroninis, duomenys gaunami kaip gabalai. Šie duomenys įtraukiami į kūno kintamąjį, kad būtų sukurtas kūnas.
- Pabaiga - Šis klausytojas įsijungia, kai baigtas pirmiau nurodytas „ACTION1“. „Facebook Graph API“ skambučio duomenys grąžina duomenis JSON formatu. Taigi konvertuojame eilutę į JSON matricą naudojant „JavaScript“ funkciją
JSON.parse
.
Jūs galite pamatyti, kad klausytojas yra prijungtas prie event_emitter
objektą. Mes „ACTION1“ pabaigoje reikia ją paleisti. Šį metodą išgirdome aiškiai facebook_emitter.emit
.
"id": "19292868552", "pavadinimas": "Facebook platforma", "nuotrauka": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "nuoroda": "https://www.facebook.com/platform", "mėgsta": 2738595, "kategorija": "Produktas / paslauga", "svetainė": "http://developers.facebook.com", "naudotojo vardas": "platforma", "įkurta": "2007 m. gegužės mėn.", "company_overview": "Facebook platforma leidžia visiems kurti socialines programas" Facebook "ir žiniatinklyje.", "misija": "Kad internetas taptų atviresnis ir socialinis." "automobilių stovėjimo aikštelė": "gatvė": 0, "partija": 0, "valet": 0,
Pirmiau pateiktas „Facebook Graph API“ skambučio atsakymas. Norint gauti mėgsta: paimkite duomenų objekto objektą, konvertuoti jį į eilutę ir perduoti išskiria
funkcija.
Po šio veiksmo mes pabaiga
prašymą.
my_http.createServer (funkcija (užklausa, atsakymas) var my_path = url.parse (request.url) .pathname; jei (my_path === "/ getdata") var listener = facebook_emitter.once ("duomenys", funkcija ( data) answer.writeHeader (200, "Turinio tipas": "text / plain"); atsakymo rašymas (duomenys); answer.end ();); other load_file (my_path, atsakymas); ). (klausytis (8080); setInterval (get_data, 1000);
Serverio kūrimas yra panašus į ankstesnę pamoką - su nedideliu pakeitimu. Kiekvienam URL (išskyrus / getdata
) mes įkelkite atitinkamą statinį failą naudodami load_file
funkcija mes apibrėžėme anksčiau.
The http: // localhost: 8080 / getdata
yra AJAX užklausos URL. Kiekviename AJAX prašome pridėti įvykio klausytoją facebook_emitter
. Jis panašus į addListener
bet klausytojas nužudomas po klausytojo skleidimo, kad būtų išvengta atminties nutekėjimo. Jei jums reikia tai patikrinti pakeisti kartą
su addListener
. Mes taip pat vadiname get_data
funkciją atlieka vieną kartą per 1 sekundę setInterval
.
Toliau sukuriame HTML puslapį, kuriame rodomas išėjimas.
Kodai:
„Facebook“ mėgsta Patinka: Įkeliama ...
Kodai Paaiškinimas:
JQuery AJAX dalis yra gana savaime suprantama. Pasitikrink load_content
funkcija. Tai atrodo taip veikia begalinė kilpa, ir taip, tai yra. Štai kodėl mėgsta atnaujinamas pats.
Kiekvienas AJAX skambutis bus atidėtas vidutiniškai 1 sekundę kadangi kiekvieno tokio skambučio paleidimas vėluoja 1 sekundę nuo serverio. AJAX užklausa bus užpildyta 1 sekundei.
Taigi jūs einate - metodas atidėti AJAX atsakymą iš serverio, kad gautumėte „Facebook“ numerį mėgsta. Jei turite kokių nors abejonių ar manote, dėkokite klausimui mūsų komentarų skiltyje!
Redaktoriaus pastaba: Šį įrašą parašė Geo Paul už Hongkiat.com. Geo yra nepriklausomas interneto / iPhone kūrėjas, kuris naudojasi PHP, Codeigniter, WordPress, jQuery ir Ajax. Jis turi 4 metų patirtį PHP ir 2 metų patirties diegimo telefonu programoje.