Kā parādīt / atjaunināt “Facebook patīk”, izmantojot Node.js
Izstrādājot iepriekšējo ziņu paraugu kodus, jūs varat saņemt sajūtu par to, kāda ir Node.js. Šodienas amatā mēs iemetam praktisku skriptu, kas nepārprotami parāda Node.js izmantošanu uz notikumiem balstītā programmēšanā.
Mēs izveidosim vienkāršu skriptu, kas izvedīs noteiktu Facebook lapu "Facebook patīk". Un papildus tam mēs iemetīsim papildu funkciju, kas ik pēc 2 sekundēm atjauninās "Facebook patīk".
Rezultāts būs vienkāršs un vienkāršs, iespējams, izskatās kaut kas līdzīgs šādam: "Likes skaits: 2630405", un tas ir atkarīgs no tā, lai to veidotu, izmantojot CSS, sāksim sākt!
Lai dotu jums ideju
Pirms mēs ieniramies, izmantojot Node.js, pieņemsim laiku, lai domātu, ko mēs parasti darām ar kopīgām serveru puses programmēšanas valodām (piemēram, PHP). Ja domājat veikt AJAX zvanu, lai atrastu numuru patīk ik pēc 2 sekundēm - jums ir taisnība - bet tas var notikt potenciāli palielina servera pieskaitāmās izmaksas.
Mēs varam apsvērt piekļūt graph.facebook.com kas būtu a laikietilpīga I / O darbība. Apsveriet 5 lietotājus, kuri piekļūst vienai un tai pašai lapai patīk). Piekļuves numurs graph.facebook.com 2 sekunžu laikā kļūs par 10, jo visi atjauninās savu numuru patīk reizi 2 sekundēs un to tiks izpildīts kā atsevišķs pavediens.
Tas nav nepieciešams ar Node.js servera ieviešanu. Tikai nepieciešama viena piekļuve Facebook serverim un laiks, lai iegūtu un iznāktu rezultātu (. \ t patīk) var ievērojami samazināt.
Tomēr kā mēs to īstenosim? Tas ir tas, ko mēs uzzināsim turpmākajās sadaļās.
Darba sākšana
Pirms mēs sākam, jūsu vajadzētu ir instalēta Node.js un darbojas ar v8 atbalstītu vides hostinga kontu. Iepazīstieties ar tematiem "Darba sākšana ar Node.js" un "Instalēšana Node.js" mūsu iepriekšējā rakstā, iesācēju ceļvedis Node.js, ja neesat.
Serveris mēs piekļuvi graph.facebook.com
2 sekunžu intervālā un atjaunināt numuru patīk. Nosauksim to kā "RĪCĪBA 1". Mēs sagatavosim lapu, lai tā ik pēc 2 sekundēm sevi atjauninātu, izmantojot AJAX.
Apsveriet daudzus lietotājus, kuri piekļūst vienai un tai pašai lapai. Katra lietotāja AJAX pieprasījumā serverī ir pievienots notikuma klausītājs, lai pabeigtu "ACTION1". Tātad, kad "ACTION1" ir pabeigts, notikuma klausītāji tiks aktivizēti.
Apskatīsim servera puses kodu.
Šie kodi:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = jauni notikumi.EventEmitter (); funkcija get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("atbilde", funkcija (atbilde) var body = ""; response.addListener ("dati", funkcija (dati) body + = data;); response.addListener ("beigas", funkcija ( ) var data = JSON.parse (ķermenis); facebook_emitter.emit ("dati", virkne (data.likes)););); request.end (); my_http.createServer (funkcija (pieprasījums, atbilde) var my_path = url.parse (request.url) .pathname; ja (my_path === "/ getdata") var listener = facebook_emitter.once ("dati", funkcija (data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); answer.end ();); other load_file (my_path, atbilde) ;) klausīties (8080); setInterval (get_data, 1000); sys.puts ("Servera darbība 8080");
Kodi Paskaidrojums:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = jauni notikumi.EventEmitter ();
Mēs izveidojam a HTTP klients piekļūt Facebook Graph API facebook_client
. Mums ir vajadzīgs arī EventEmitter ()
funkcija, kas aktivizēsies, kad "ACTION1" ir pabeigta.
Tas būs skaidrs tālāk aprakstītajā kodā.
funkcija get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("atbilde", funkcija (atbilde) var body = ""; response.addListener ("dati", funkcija (dati) body + = data;); response.addListener ("beigas", funkcija ( ) var data = JSON.parse (ķermenis); facebook_emitter.emit ("dati", virkne (data.likes)););); request.end ();
Funkcija get_data
ielādē datus no Facebook API zvana. Mēs vispirms izveidot GET pieprasījumu izmantojot pieprasījums
šādas sintakses metode:
Client.request ('GET', 'get_url', "host": "host_url");
Numurs “19292868552” ir lapas Facebook ID, kuram nepieciešams piekļūt tās detaļām. Tātad galīgā lapa, kuru mēģinām piekļūt, kļūst par: http://graph.facebook.com/19292868552. Pēc pieprasījuma iesniegšanas mums ir nepieciešams pievienojiet tai trīs klausītājus, attiecīgi:
- Atbilde - Šis klausītājs tiek aktivizēts, kad pieprasījums sāk saņemt datus. Šeit mēs uzstādām atbildi uz tukšu virkni.
- Dati - Tā kā Node.js ir asinhrons, dati tiek saņemti kā gabali. Šie dati tiek pievienoti ķermeņa mainīgajiem, lai izveidotu ķermeni.
- Beigas - Šis klausītājs tiek aktivizēts, kad ir pabeigts iepriekš minētais "ACTION1". Facebook Graph API zvana atgrieztie dati atgriež datus JSON formātā. Tātad mēs pārveidojam virkni uz JSON masīvu, izmantojot JavaScript funkciju
JSON.parse
.
Jūs varat redzēt, ka klausītājam ir pievienots event_emitter
objektu. Mēs nepieciešams aktivizēt to "ACTION1" beigās. Ar šo metodi mēs klausāmies tieši facebook_emitter.emit
.
"id": "19292868552", "vārds": "Facebook platforma", "attēls": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "saite": "https://www.facebook.com/platform", "patīk": 2738595, "kategorija": "Produkts / pakalpojums", "vietne": "http://developers.facebook.com", "lietotājvārds": "platforma", "dibināta": "2007. gada maijs", "company_overview": "Facebook platforma ļauj ikvienam veidot sociālās lietotnes Facebook un tīmeklī.", "misija": "Lai padarītu tīmekli atvērtāku un sociālāku." "autostāvvieta": "iela": 0, "partija": 0, "valet": 0,
Iepriekšminētais ir atbilde uz Facebook Graph API zvanu. Lai iegūtu numuru patīk: veikt datu objekta objektu, pārvērst to par virkni un nodot to emitēt
funkciju.
Pēc šīs darbības mēs beigas
Lūgums.
my_http.createServer (funkcija (pieprasījums, atbilde) var my_path = url.parse (request.url) .pathname; ja (my_path === "/ getdata") var listener = facebook_emitter.once ("dati", funkcija ( data) answer.writeHeader (200, "Content-Type": "text / plain"); atbildes rakstīšana (dati); answer.end ();); other load_file (my_path, atbilde); ) klausīties (8080); setInterval (get_data, 1000);
Servera izveide ir līdzīga iepriekšējai apmācībai - ar nelielām izmaiņām. Par katru URL (izņemot / getdata
) mēs ielādējiet atbilstošo statisko failu, izmantojot load_file
funkciju mēs definējām iepriekš.
The http: // localhost: 8080 / getdata
ir AJAX pieprasījuma URL. Katrā AJAX pieprasījumā mēs pievienojiet notikuma klausītāju facebook_emitter
. Tas ir līdzīgs addListener
bet klausītājs tiek nogalināts, kad klausītājs tiek izvadīts, lai izvairītos no atmiņas noplūdes. Ja jums ir nepieciešams to pārbaudīt aizstāt vienreiz
ar addListener
. Mēs arī saucam par get_data
funkcijas vienu reizi sekundē setInterval
.
Tālāk mēs izveidojam HTML lapu, kurā tiek parādīts izeja.
Šie kodi:
Facebook patīk Patīkamo skaits: Notiek ielāde ...
Kodi Paskaidrojums:
JQuery AJAX daļa ir diezgan pašsaprotama. Vai pārbaudīt zvanu load_content
funkciju. Tā izskatās darbojas bezgalīga cilpa, un jā tā ir. Tādā veidā patīk tiek atjaunināts pats.
Katrs AJAX zvans tiks aizkavēta vidējais laiks 1 sekunde tā kā katra šāda zvana aktivizēšanas aizkavēšanās būs 1 sekunde no servera. AJAX pieprasījums būs nepilnīgs 1 sekundei.
Tātad jūs iet - metode, kas aizkavē AJAX atbildi no servera, lai iegūtu Facebook numuru patīk. Ja jums ir šaubas vai domāja, paldies mūsu komentāru sadaļā!
Redaktora piezīme: Šo ziņu raksta Geo Paul par Hongkiat.com. Geo ir neatkarīgs Web / iPhone izstrādātājs, kurš strādā ar PHP, Codeigniter, WordPress, jQuery un Ajax. Viņam ir 4 gadu pieredze PHP un 2 gadu pieredze iniPhone lietojumprogrammu izstrādē.