Cara Paparkan / Kemas kini Suka Facebook Menggunakan Node.js
Dengan menggunakan kod sampel dari jawatan terdahulu, anda mungkin mendapat apa yang sebenarnya manfaat menggunakan Node.js. Dalam jawatan hari ini, kami melancarkan skrip praktikal yang jelas menunjukkan penggunaan Node.js dalam pengaturcaraan berasaskan acara.
Kami akan mencipta skrip mudah yang menghasilkan jumlah "Facebook suka" halaman Facebook tertentu. Dan di atas itu, kami akan membuang ciri tambahan yang akan mengemas kini bilangan "suka Facebook" setiap 2 saat.
Output akan mudah dan jelas, mungkin kelihatan seperti ini: "Jumlah Suka: 2630405" dan terpulang kepada anda untuk menggunakannya menggunakan CSS, mari bermula!
Untuk Memberi Anda Ide
Sebelum kita menyelam menggunakan Node.js, mari kita luangkan masa untuk berfikir apa yang biasanya kita lakukan dengan bahasa pengaturcaraan umum (seperti PHP). Jika anda berfikir untuk membuat panggilan AJAX untuk mencari bilangan suka dalam setiap 2 saat - anda betul - tetapi ini mungkin berpotensi meningkatkan overhead pelayan.
Kita boleh pertimbangkan mengakses graph.facebook.com yang akan menjadi a operasi I / O yang memakan masa. Pertimbangkan 5 pengguna mengakses halaman yang sama (yang menghasilkan bilangan suka). Bilangan akses kepada graph.facebook.com dalam 2 saat akan menjadi 10, kerana setiap orang akan mengemas kini bilangannya suka sekali dalam 2 saat dan ia akan dilaksanakan sebagai benang berasingan.
Itu tidak perlu dengan pelaksanaan pelayan Node.js. Hanya satu akses kepada pelayan Facebook diperlukan dan juga masa untuk mendapatkan dan output keputusan (bilangan suka) boleh dikurangkan.
Walau bagaimanapun, bagaimana kita akan melaksanakannya? Inilah yang akan kita ketahui dalam bahagian di bawah.
Bermula
Sebelum kita mulakan, sebaiknya mempunyai Node.js dipasang dan berjalan pada akaun hosting web yang disokong oleh persekitaran v8. Lihat topik, "Bermula dengan Node.js" dan "Memasang Node.js" dalam artikel kami sebelumnya, Panduan Permulaan untuk Node.js jika anda tidak mempunyai.
Dalam pelayan kami akses graph.facebook.com
pada jarak 2 saat dan kemas kini bilangan suka. Mari kita sebut ini sebagai "ACTION1"Kami akan menyediakan satu halaman supaya ia akan mengemas kini dirinya melalui AJAX setiap 2 saat.
Pertimbangkan ramai pengguna mengakses halaman yang sama. Untuk setiap permintaan AJAX pengguna, pendengar acara dilampirkan di pelayan untuk menyelesaikan "ACTION1". Oleh itu, apabila "ACTION1" selesai, pendengar acara akan dicetuskan.
Mari kita lihat pada kod sisi pelayan.
Kod:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter (); fungsi get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("respons", fungsi (tindak balas) var body = ""; response.addListener ("data", fungsi (data) body + = data;); response.addListener ("end" ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end (); my_http.createServer (fungsi (permintaan, tindak balas) 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, ;). dengar (8080); setInterval (get_data, 1000); sys.puts ("Server Running on 8080");
Penjelasan Kod:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter ();
Kami mencipta Pelanggan HTTP untuk mengakses API Graf Facebook facebook_client
. Kami juga memerlukannya EventEmitter ()
fungsi yang akan mencetuskan apabila "ACTION1" selesai.
Ini akan jelas dalam kod yang dihuraikan di bawah.
fungsi get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("respons", fungsi (tindak balas) var body = ""; response.addListener ("data", fungsi (data) body + = data;); response.addListener ("end" ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end ();
Fungsi get_data
mengambil data dari Call Facebook API. Kami pertama buat permintaan GET menggunakan permintaan
kaedah sintaks yang berikut:
Client.request ('GET', 'get_url', "host": "host_url");
Jumlah “19292868552” adalah ID Facebook halaman yang kita perlukan untuk mengakses butirannya. Jadi halaman akhir yang kita cuba akses menjadi: http://graph.facebook.com/19292868552. Selepas membuat permintaan, kami perlu tambah tiga pendengar, masing-masing yang berikut:
- Tindak balas - Pendengar ini dicetuskan apabila permintaan mula menerima data. Di sini kita menetapkan jawapan kepada rentetan kosong.
- Data - Oleh kerana Node.js tidak segerak data diterima sebagai ketulan. Data ini dimasukkan ke dalam pembolehubah badan untuk membina badan.
- Akhirnya - Pendengar ini dicetuskan apabila "ACTION1" yang dinyatakan di atas telah selesai. Data yang dikembalikan oleh data Facebook Graph API memulangkan data dalam format JSON. Jadi kami menukar rentetan kepada array JSON menggunakan fungsi JavaScript
JSON.parse
.
Anda dapat melihat bahawa pendengar dilampirkan untuk event_emitter
objek. Kami perlu mencetuskannya pada akhir "ACTION1". Kami mencetuskan pendengar secara eksplisit dengan kaedah facebook_emitter.emit
.
"id": "19292868552", "name": "Facebook Platform", "picture": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "suka": 2738595, "kategori": "Produk / perkhidmatan", "laman web": "http://developers.facebook.com", "nama pengguna": "platform", "diasaskan": "May 2007", "company_overview": "Platform Facebook membolehkan sesiapa sahaja untuk membina aplikasi sosial di Facebook dan web.", "misi": "Untuk membuat web lebih terbuka dan sosial.", "tempat letak kereta": "jalan": 0, "banyak": 0, "valet": 0,
Di atas mewakili tindak balas panggilan Facebook Graph API. Untuk mendapatkan bilangan suka: mengambil objek suka objek data, menukarnya kepada rentetan dan lulus memancarkan
fungsi.
Selepas tindakan ini kita akhir
permintaan.
my_http.createServer (function (request, response) 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); ). Dengar (8080); setInterval (get_data, 1000);
Mewujudkan pelayan adalah serupa dengan tutorial sebelumnya - dengan perubahan kecil. Untuk setiap URL (kecuali / getdata
) kita muatkan fail statik yang sepadan dengan menggunakan load_file
fungsi kami telah menentukan sebelum ini.
The http: // localhost: 8080 / getdata
adalah URL untuk permintaan AJAX. Dalam setiap permintaan AJAX kami lampirkan pendengar acara ke facebook_emitter
. Ia sama dengan yang addListener
tetapi pendengarnya dibunuh selepas pendengar dikeluarkan untuk mengelakkan kebocoran ingatan. Sekiranya anda perlu menyemaknya hanya menggantikan sekali
dengan addListener
. Kami juga memanggil get_data
fungsi sekali dalam 1 saat oleh fungsi setInterval
.
Seterusnya, kami membuat halaman HTML di mana paparan output dipaparkan.
Kod:
Suka Facebook Bilangan Suka: Memuatkan ...
Penjelasan Kod:
Bahagian jQuery AJAX cukup jelas. Periksa senarai panggilan load_content
fungsi. Ia kelihatan seperti itu sedang menjalankan gelung tak terhingga, dan ya itu. Begitulah bilangannya suka mendapat dikemas kini sendiri.
Setiap panggilan AJAX akan ditangguhkan oleh masa purata 1 saat kerana kelewatan memicu setiap panggilan tersebut akan menjadi 1 saat dari pelayan. Permintaan AJAX akan dalam bentuk yang tidak lengkap untuk 1 saat itu.
Jadi di sana anda pergi - kaedah menunda tindak balas AJAX dari pelayan untuk mendapatkan bilangan Facebook suka. Jatuhkan soalan di bahagian komen kami jika anda mempunyai keraguan atau pemikiran, terima kasih!
Nota editor: Jawatan ini ditulis oleh Geo Paul untuk Hongkiat.com. Geo adalah pemaju Web / iPhone bebas yang suka bekerja dengan PHP, Codeigniter, WordPress, jQuery dan Ajax. Beliau mempunyai 4 tahun pengalaman dalam PHP dan 2 tahun pengalaman iniPengembangan aplikasi telefon.