Hjemmeside » Coding » Sådan vises / opdateres Facebook Likes ved hjælp af Node.js

    Sådan vises / opdateres Facebook Likes ved hjælp af Node.js

    Ved at udarbejde prøvekoderne fra det foregående indlæg, har du måske følelsen af, hvad der er den egentlige fordel ved at bruge Node.js. I dagens indlæg smider vi i et praktisk script, der tydeligt demonstrerer brugen af ​​Node.js i eventbaseret programmering.

    Vi opretter et simpelt script, der udsender antallet af "Facebook-likes" på en bestemt Facebook-side. Og på den anden side smider vi en ekstra funktion, der opdaterer antallet af "Facebook-likes" hvert andet sekund.

    Udgangen vil være enkel og ren, sandsynligvis ser sådan ud som sådan: "Antal Likes: 2630405" og det er op til dig at style det ved hjælp af CSS, lad os komme i gang så!

    At give dig en ide

    Før vi dykker ind i brug af Node.js, lad os tage et øjeblik til at tænke over, hvad vi normalt ville gøre med fælles server-side programmeringssprog (som PHP). Hvis du tænker at lave et AJAX opkald for at finde nummeret på kan lide i hvert 2. sekund - du er korrekt - men det kan det potentielt øge serverens overhead.

    Vi kan overveje adgang graph.facebook.com hvilket ville være en tidskrævende I / O operation. Overvej 5 brugere, der får adgang til den samme side (som udsender antallet af kan lide). Antallet af adgang til graph.facebook.com om 2 sekunder bliver 10, fordi alle vil opdatere hans / hendes nummer af kan lide en gang om 2 sekunder og den vil blive udført som en separat tråd.

    Det er ikke nødvendigt med en Node.js-serverimplementering. Kun En adgang til Facebook-serveren er påkrævet og tid til at få og output resultatet (antal af kan lide) kan reduceres betydeligt.

    Men hvordan skal vi gennemføre dette? Det er det, vi skal finde ud af i afsnittene nedenfor.

    Kom i gang

    Før vi starter, skal du har Node.js installeret og kører på en v8 miljøunderstøttet webhostingkonto. Se emnerne "Kom godt i gang med Node.js" og "Installing Node.js" i vores tidligere artikel, Begyndervejledning til Node.js, hvis du ikke har det.

    I serveren vi adgang graph.facebook.com med et interval på 2 sekunder og Opdater antallet af kan lide. Lad os kalde dette som "handling1". Vi udarbejder en side, så den opdaterer sig via AJAX hvert andet sekund.

    Overvej mange brugere, der har adgang til den samme side. For hver brugers AJAX-anmodning er en begivenhedslytter tilknyttet serveren for færdiggørelsen af ​​"ACTION1". Så når "ACTION1" er afsluttet, vil eventlytterne blive udløst.

    Lad os se på server-sideens kode.

    Koderne:

     var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nye events.EventEmitter (); funktion get_data () var request = facebook_client.request ("GET", "/ 19292868552", "vært": "graph.facebook.com"); request.addListener ("response", funktion (svar) var body = ""; response.addListener ("data", funktion (data) body + = data;); response.addListener ) var data = JSON.parse (krop); facebook_emitter.emit ("data", String (data.likes));); request.end ();  my_http.createServer (funktion (anmodning, svar) var my_path = url.parse (request.url) .pathname; hvis (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) ;). lyt (8080); setInterval (get_data, 1000); sys.puts ("Server kører på 8080"); 

    Koder Forklaring:

     var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nye events.EventEmitter (); 

    Vi opretter en HTTP-klient for at få adgang til Facebook Graph API facebook_client. Vi har også brug for EventEmitter () funktion, som vil udløse, når "ACTION1" har afsluttet.

    Dette fremgår af nedenstående kode.

     funktion get_data () var request = facebook_client.request ("GET", "/ 19292868552", "vært": "graph.facebook.com"); request.addListener ("response", funktion (svar) var body = ""; response.addListener ("data", funktion (data) body + = data;); response.addListener ) var data = JSON.parse (krop); facebook_emitter.emit ("data", String (data.likes));); request.end ();  

    Fungere get_data henter data fra Facebook API Call. Vi først opret en GET-anmodning bruger anmodning metode til følgende syntaks:

     Client.request ( 'GET', 'GET_URL',  "host": "host_url"); 

    Nummeret “19292868552” er Facebook-id på siden, som vi har brug for for at få adgang til dens detaljer. Så den endelige side, vi forsøger at få adgang til, bliver: http://graph.facebook.com/19292868552. Efter anmodningen skal vi tilføj tre lyttere til det, henholdsvis følgende:

    1. Respons - Denne lytter udløses, når anmodningen begynder at modtage data. Her sætter vi krop af svaret på en tom streng.
    2. Data - Da Node.js er asynkron, modtages dataene som klumper. Disse data tilføjes i kroppens variabel for at opbygge kroppen.
    3. Ende - Denne lytter udløses, når den ovenfor angivne "ACTION1" er gennemført. Dataene returneres af Facebook Graph API-opkaldet returnerer data i JSON-format. Så vi konverterer strengen til JSON array ved hjælp af JavaScript-funktionen JSON.parse.

    Du kan se, at en lytter er vedhæftet til event_emitter objekt. Vi skal udløse det i slutningen af ​​"ACTION1". Vi udløser lytteren eksplicit med metoden facebook_emitter.emit.

     "id": "19292868552", "navn": "Facebook Platform", "billede": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "likes": 2738595, "kategori": "Product / service", "website": "http://developers.facebook.com", "brugernavn": "platform", "grundlagt": "maj 2007", "company_overview": "Facebook Platform giver alle mulighed for at opbygge sociale apps på Facebook og på internettet.", "mission": "At gøre internettet mere åbent og socialt." "parkering": "street": 0, "lot": 0, "valet": 0,

    Ovennævnte repræsenterer svaret på Facebook Graph API-opkaldet. For at få antallet af kan lide: tag det samme som objektobjektet, konvertere det til streng og send det til udsender fungere.

    Efter denne handling vi ende forspørgelsen.

     my_http.createServer (funktion (anmodning, svar) var my_path = url.parse (request.url) .pathname; hvis (my_path === "/ getdata") var listener = facebook_emitter.once ("data", funktion data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response); ). lyt (8080); setInterval (get_data, 1000); 

    Oprettelse af serveren ligner den tidligere vejledning - med en lille ændring. For hver webadresse (undtagen / getdata) vi Indlæs den tilsvarende statiske fil ved hjælp af load_file fungere vi definerede tidligere.

    Det http: // localhost: 8080 / getdata er webadressen til AJAX-anmodningen. I hver AJAX anmodning vi vedhæft en hændelseslytter til facebook_emitter. Det ligner den addListener men lytteren bliver dræbt efter at lytteren er udsendt for at undgå hukommelseslækage. Hvis du har brug for at tjekke det ud bare udskift enkelt gang med addListener. Vi kalder også get_data fungere en gang i 1 sekund af funktionen setInterval.

    Dernæst opretter vi HTML-siden, hvor output vises.

    Koderne:

        Facebook kan lide     

    Antal Likes: Indlæser…

    Koder Forklaring:

    JQuery AJAX-delen er ret selvforklarende. Tjek venligst opkaldet til load_content fungere. Det ligner det kører en uendelig sløjfe, og ja det er det. Sådan er antallet af kan lide bliver opdateret selv.

    Hvert AJAX-opkald vil blive forsinket med den gennemsnitlige tid på 1 sekund som forsinkelsen i udløsningen af ​​hvert sådant opkald vil være 1 sekund fra serveren. AJAX-anmodningen vil være i en ufuldstændig form for det pågældende 1 sekund.

    Så der går du - en metode til at forsinke et AJAX svar fra serveren for at få antallet af Facebook kan lide. Drop spørgsmål i vores kommentar sektion, hvis du har nogen tvivl eller troede, tak!

    Redaktørens note: Dette indlæg er skrevet af Geo Paul til Hongkiat.com. Geo er en uafhængig Web / iPhone-udvikler, der nyder at arbejde med PHP, Codeigniter, WordPress, jQuery og Ajax. Han har 4 års erfaring i PHP og 2 års erfaring iniPhone Application Development.