Как да се показват / актуализират Facebook Likes Използване на Node.js
Чрез изработване на примерните кодове от предишния пост може да получите усещането каква е реалната полза от използването на Node.js. В днешния пост, ние хвърляме в практически скрипт, който ясно демонстрира използването на Node.js в събитие-базирано програмиране.
Ще създадем прост скрипт, който извежда броя на „харесвания във Facebook“ на дадена страница във Facebook. И на всичкото отгоре, ще добавим допълнителна функция, която ще актуализира броя на "харесвания във Facebook" на всеки 2 секунди.
Изходът ще бъде прост и обикновен, вероятно изглежда по следния начин: "Брой харесвания: 2630405" и от вас зависи да го оформите с помощта на CSS, да започнем тогава!
Да ви даде идея
Преди да се потопим в използването на Node.js, нека помислим за това, което обикновено правим с обикновени езици за програмиране от страна на сървъра (като PHP). Ако мислите да направите AJAX повикване, за да намерите броя на харесвания на всеки 2 секунди - вие сте прав - но това може потенциално увеличаване на режима на сървъра.
Можем да помислим достъп до graph.facebook.com което би било отнема много време I / O операция. Помислете за 5 потребители, които имат достъп до една и съща страница (която извежда броя на харесвания). Брой на достъп до graph.facebook.com след 2 секунди ще стане 10, защото всеки ще актуализира броя си харесвания веднъж на 2 секунди и то ще се изпълни като отделна нишка.
Това не е необходимо с изпълнението на Node.js сървър. само изисква се един достъп до сървъра на Facebook и време, за да получите и изведете резултата (брой харесвания) може значително да се намали.
Но как ще приложим това? Това ще разберем в раздела по-долу.
Приготвяме се да започнем
Преди да започнем, трябва имате инсталиран Node.js и работи на акаунт за уеб хостинг, поддържан от v8. Разгледайте темите "Първи стъпки с Node.js" и "Инсталиране на Node.js" в предишната ни статия, Ръководство за начинаещи на Node.js, ако не сте.
В сървъра ние достъп graph.facebook.com
на интервал от 2 секунди и актуализирате броя на харесвания. Да наречем това като "Дейност 1"Ще подготвим страница, така че да се актуализира чрез AJAX на всеки 2 секунди.
Помислете за много потребители, които имат достъп до една и съща страница. За всеки потребител AJAX заявка слушател на събитие е прикрепен в сървъра за завършване на "ACTION1". Така че, когато "ACTION1" завърши, слушателите на събития ще се задействат.
Нека да разгледаме кода на сървърната страна.
Кодовете:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = нови събития.EventEmitter (); функция get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("отговор", функция (отговор) var body = ""; response.addListener ("данни", функция (данни) body + = data;); response.addListener ("край", функция ( ) var data = JSON.parse (body); facebook_emitter.emit ("данни", String (data.likes)););); request.end (); my_http.createServer (функция (заявка, отговор) var my_path = url.parse (request.url) .pathname, ако (my_path === "/ getdata") var listener = facebook_emitter.once ("данни", (data) response.writeHeader (200, "Content-Type": "текст / обикновен"); response.write (data); response.end ();); else load_file (my_path, response) слушайте (8080); setInterval (get_data, 1000); sys.puts ("Сървър, работещ на 8080");
Кодове Обяснение:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = нови събития.EventEmitter ();
Ние създаваме a HTTP клиент за достъп до API на Facebook Graph facebook_client
. Ние също се нуждаем от EventEmitter ()
функция, която ще се задейства, когато "ACTION1" завърши.
Това ще стане ясно в описания по-долу код.
функция get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("отговор", функция (отговор) var body = ""; response.addListener ("данни", функция (данни) body + = data;); response.addListener ("край", функция ( ) var data = JSON.parse (body); facebook_emitter.emit ("данни", String (data.likes)););); request.end ();
функция get_data
извлича данни от извикването на API за Facebook. Ние първо създайте GET заявка използвайки поискване
метод със следния синтаксис:
Client.request ( "СЕ", "GET_URL" "гостоприемник": "host_url");
Броя “19292868552” е Facebook ID на страницата, която ни е необходима за достъп до нейните данни. Така че последната страница, която се опитваме да получим, става: http://graph.facebook.com/19292868552. След като направим искането, трябва добавете три слушатели към него, съответно следното:
- отговор - Този слушател се задейства, когато заявката започне да получава данни. Тук задаваме тялото на отговора на празен низ.
- Данни - Тъй като Node.js е асинхронен, данните се получават като парчета. Тези данни се добавят в променливата на тялото, за да се изгради тялото.
- Край - Този слушател се задейства, когато е завършено посоченото по-горе „ACTION1“. Данните, върнати от извикването на API на Graph на Facebook, връщат данни в JSON формат. Така конвертираме низа в JSON масив, използвайки JavaScript функцията
JSON.parse
.
Можете да видите, че слушателят е прикрепен за event_emitter
обект. ние трябва да я задействате в края на „ACTION1“. Ние задействаме слушателя изрично с метода facebook_emitter.emit
.
"id": "19292868552", "name": "Платформа на Facebook", "картинка": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "връзка": „https://www.facebook.com/platform“, „likes“: 2738595, „категория“: „Продукт / услуга“, „уебсайт“: „http://developers.facebook.com“, „потребителско име“: "платформа", "основава": "Май 2007", "company_overview": "Платформата на Facebook позволява на всеки да изгражда социални приложения във Facebook и в мрежата.", "мисия": "За да направите мрежата по-отворена и социална.", "паркинг": "улица": 0, "лот": 0, "вале": 0,
Посоченото по-горе представлява отговорът на извикването на API на графиката във Facebook. За да получите броя на харесвания: вземете обектът "харесва" на обекта на данни, конвертирайте го в низ и го предайте излъчват
функция.
След това действие ние край
запитването.
my_http.createServer (функция (заявка, отговор) var my_path = url.parse (request.url) .pathname, ако (my_path === "/ getdata") var listener = facebook_emitter.once ("данни", функция ( data) response.writeHeader (200, "Content-Type": "текст / обикновен"); response.write (data); response.end ();); else load_file (my_path, response); слушайте (8080); setInterval (get_data, 1000);
Създаването на сървъра е подобно на предишния урок - с малка промяна. За всеки URL адрес (с изключение на / getdata
) ние заредете съответния статичен файл с помощта на load_file
функция дефинирахме по-рано.
Най- HTTP: // Localhost: 8080 / getdata
е URL адресът за AJAX заявката. Във всяка AJAX заявка ние да прикачите слушател на събитие facebook_emitter
. Тя е подобна на addListener
но слушателя е убит след излъчване на слушателя, за да се избегне изтичане на памет. Ако трябва да го проверите просто замени веднъж
с addListener
. Ние също наричаме get_data
функция веднъж в 1 секунда от функцията setInterval
.
След това създаваме HTML страницата, на която се показват изходните данни.
Кодовете:
Обича Facebook Брой харесвания: Зареждане…
Кодове Обяснение:
JQuery AJAX частта е доста очевидна. Проверете обаждането на load_content
функция. Изглежда така работи безкраен цикъл, и да. Ето какъв е броят на харесвания се обновява.
Всяко повикване AJAX ще се забави със средното време от 1 секунда тъй като забавянето на задействането на всеки такъв разговор ще бъде 1 секунда от сървъра. AJAX заявката ще бъде в непълна форма за тази 1 секунда.
Така че ето - метод за забавяне на AJAX отговор от сървъра, за да получите броя на Facebook харесвания. Пуснете въпроса в нашия раздел за коментари, ако имате някакви съмнения или мисли, благодаря!
Бележка на редактора: Тази публикация е написана от Гео Пол за Hongkiat.com. Geo е независим разработчик на уеб / iPhone, който работи с PHP, Codeigniter, WordPress, jQuery и Ajax. Той има 4-годишен опит в PHP и 2 години опит в разработката на iniPhone приложения.