Slik viser / oppdaterer du Facebook Liker ved hjelp av Node.js
Ved å utarbeide prøvekoder fra forrige innlegg, har du kanskje følelsen av hva som er den faktiske fordelen ved å bruke Node.js. I dagens innlegg kaster vi inn et praktisk skript som tydelig demonstrerer bruken av Node.js i hendelsesbasert programmering.
Vi lager et enkelt skript som utgiver antall Facebook-likesaker på en bestemt Facebook-side. Og i tillegg vil vi kaste inn en ekstra funksjon som oppdaterer antall "Facebook-liker" hvert 2. sekund.
Utgangen vil være enkel og vanlig, ser sannsynligvis noe ut som dette: "Antall Likes: 2630405" og det er opp til deg å stilte det ved hjelp av CSS, la oss komme i gang da!
Å gi deg en ide
Før vi dykker inn i å bruke Node.js, la oss ta et øyeblikk til å tenke hva vi vanligvis ville gjøre med felles serverprogrammeringsspråk (som PHP). Hvis du tenker å lage et AJAX-anrop for å finne nummeret på liker i hvert 2. sekund - du er riktig - men dette kan potensielt øke serveren overhead.
Vi kan vurdere tilgang graph.facebook.com som ville være en tidkrevende I / O-operasjon. Overvei at 5 brukere har tilgang til samme side (som utdataer antall liker). Antall tilgang til graph.facebook.com om 2 sekunder blir 10, fordi alle vil oppdatere hans / hennes nummer på liker en gang om 2 sekunder og den vil bli utført som en separat tråd.
Det er ikke nødvendig med en Node.js server implementering. Bare En tilgang til Facebook-serveren er nødvendig og tid til å få og sende resultatet (antall liker) kan bli sterkt redusert.
Men hvordan skal vi implementere dette? Det er det vi skal finne ut i seksjonene nedenfor.
Starter
Før vi begynner, bør du har Node.js installert og kjører på en v8 miljø-støttet web hosting konto. Sjekk ut emnene "Komme i gang med Node.js" og "Installing Node.js" i vår forrige artikkel, Begynnerveiledning til Node.js hvis du ikke har det.
På serveren vi adgang graph.facebook.com
med et intervall på 2 sekunder og oppdater nummeret på liker. La oss kalle dette som "handling1". Vi vil utarbeide en side slik at den vil oppdatere seg via AJAX hvert 2. sekund.
Vurder mange brukere som har tilgang til den samme siden. For hver brukers AJAX-forespørsel er en hendelseslytter tilknyttet serveren for å fullføre "ACTION1". Så når "ACTION1" er ferdig, vil hendelseslytterne bli utløst.
La oss ta en titt på serverens kode.
Koderne:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nye events.EventEmitter (); funksjon get_data () var request = facebook_client.request ("GET", "/ 19292868552", "vert": "graph.facebook.com"); request.addListener ("respons", funksjon (respons) var body = ""; response.addListener ("data", funksjon (data) body + = data;); response.addListener ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end (); my_http.createServer (varsel (forespørsel, svar) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data" (data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response) ;). lytt (8080); setInterval (get_data, 1000); sys.puts ("Server kjører på 8080");
Koder Forklaring:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nye events.EventEmitter ();
Vi lager en HTTP-klient for å få tilgang til Facebook Graph API facebook_client
. Vi trenger også EventEmitter ()
funksjon som vil utløse når "ACTION1" har fullført.
Dette vil være klart i koden som er beskrevet nedenfor.
funksjon get_data () var request = facebook_client.request ("GET", "/ 19292868552", "vert": "graph.facebook.com"); request.addListener ("respons", funksjon (respons) var body = ""; response.addListener ("data", funksjon (data) body + = data;); response.addListener ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end ();
Funksjon get_data
henter data fra Facebook API-anropet. Vi først opprett en GET-forespørsel bruker be om
metode for følgende syntaks:
Client.request ( 'GET', 'GET_URL', "host": "host_url");
Nummeret “19292868552” er Facebook-IDen til siden som vi trenger for å få tilgang til detaljene. Så den endelige siden vi prøver å få tilgang til, blir: http://graph.facebook.com/19292868552. Etter å ha gjort forespørselen må vi legg til tre lyttere til det, henholdsvis følgende:
- Respons - Denne lytteren utløses når forespørselen begynner å motta data. Her setter vi kroppen av svaret på en tom streng.
- Data - Da Node.js er asynkron, mottas dataene som biter. Disse dataene legges inn i kroppsvariabelen for å bygge opp kroppen.
- Slutt - Denne lytteren utløses når "ACTION1" spesifisert ovenfor er fullført. Dataene som returneres av Facebook Graph API-anrop returnerer data i JSON-format. Så vi konverterer strengen til JSON array ved hjelp av JavaScript-funksjonen
JSON.parse
.
Du kan se at en lytter er vedlagt for event_emitter
gjenstand. Vi må utløse det på slutten av "ACTION1". Vi utløser lytteren eksplisitt med metoden facebook_emitter.emit
.
"id": "19292868552", "navn": "Facebook Platform", "bilde": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "likes": 2738595, "kategori": "Produkt / tjeneste", "nettsted": "http://developers.facebook.com", "brukernavn": "plattform", "grunnlagt": "mai 2007", "company_overview": "Facebook Platform gjør at noen kan bygge sosiale apper på Facebook og på nettet.", "Mission": "For å gjøre nettet mer åpent og sosialt." "parkering": "street": 0, "lot": 0, "valet": 0,
Ovennevnte representerer svaret på Facebook Graph API-anropet. For å få nummeret på liker: ta det samme objektet til dataobjektet, konvertere den til streng og send det til avgir
funksjon.
Etter denne handlingen vi slutt
forespørselen.
my_http.createServer (funksjon (forespørsel, svar) var my_path = url.parse (request.url) .pathname; hvis (my_path === "/ getdata") var listener = facebook_emitter.once ("data", funksjon data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response); ). lytt (8080); setInterval (get_data, 1000);
Opprette serveren ligner på den forrige opplæringen - med en liten endring. For hver nettadresse (unntatt / GetData
) vi Last inn den tilsvarende statiske filen ved hjelp av load_file
funksjon vi definerte tidligere.
De http: // localhost: 8080 / GetData
er nettadressen for AJAX-forespørselen. I hver AJAX forespørsel vi legg til en hendelseslytter til facebook_emitter
. Det ligner på addListener
men lytteren blir drept etter at lytteren er utstilt for å unngå minnelekkasje. Hvis du trenger å sjekke det ut bare erstatte en gang
med addListener
. Vi kaller også get_data
Fungerer en gang i 1 sekund ved funksjonen setInterval
.
Deretter lager vi HTML-siden der utdataene vises.
Koderne:
Facebook liker Antall liker: Laster ...
Koder Forklaring:
JQuery AJAX-delen er ganske selvforklarende. Sjekk ut kallet til load_content
funksjon. Det ser ut som det kjører en uendelig sløyfe, og ja det er det. Det er slik antall liker blir oppdatert selv.
Hver AJAX-samtale vil bli forsinket med gjennomsnittlig tid på 1 sekund som forsinkelsen i utløsningen av hvert slikt anrop vil være 1 sekund fra serveren. AJAX-forespørselen vil være i en ufullstendig form for det første sekund.
Så der går du - en metode for å forsinke et AJAX-svar fra serveren for å få antall Facebook liker. Slipp spørsmål i kommentarseksjonen din hvis du har tvil eller tenkt, takk!
Redaktørens notat: Dette innlegget er skrevet av Geo Paul for Hongkiat.com. Geo er en uavhengig web / iPhone-utvikler som liker å jobbe med PHP, Codeigniter, WordPress, jQuery og Ajax. Han har 4 års erfaring i PHP og 2 års erfaring iniPhone Application Development.