Ինչու են HTML5-ում ներկայացվել server-sent իրադարձությունները:
sobes.tech AI
Պատասխան AI-ից
Սերվերից ուղարկվող իրադարձություններ (SSE) ներդրվել են HTML5-ում՝ տվյալներ սերվերից հաճախորդին միակողմանի փոխանցելու համար, իրական ժամանակում, HTTP կապի միջոցով: Սա թույլ է տալիս ստանալ թարմացումներ սերվերից՝ առանց հաճախորդի մշտական հարցումների (պոլինգ): Հիմնական առավելությունները մյուս տեխնոլոգիաների նկատմամբ՝
- Պարզություն: Օգտագործում է սովորական HTTP կապ, ինչը հեշտացնում է ինտեգրացիան առկա վեբ տեխնոլոգիաների և ենթակառուցվածքի հետ:
- Արդյունավետություն: Թույլ է տալիս սերվերին ուղարկել տվյալներ, երբ դրանք պատրաստ են, նվազեցնելով ցանցի և սերվերի բեռը՝ համեմատած հաճախակի պոլինգի:
- Ավտոմատ վերամիացում: Բրաուզերը ինքնաբերաբար փորձում է վերականգնել կապը ընդհատման դեպքում:
- Ներքին մշակում:
EventSourceAPI-ն բրաուզերում տրամադրում է պարզ ինտերֆեյս իրադարձությունների և տվյալների աշխատանքի համար:
Օգտագործման օրինակ հաճախորդի կողմից՝
// Ստեղծում ենք նոր EventSource օբյեկտ՝ նշելով SSE սերվերի URL-ը
const eventSource = new EventSource('/updates');
// Հետևում ենք 'message' իրադարձությանը՝ ստանալու տվյալներ սերվերից
eventSource.onmessage = function(event) {
// Տպում ենք ստացված տվյալները կոնսոլում
console.log('Նոր տվյալներ սերվերից:', event.data);
};
// Հետևում ենք կապի սխալներին
eventSource.onerror = function(error) {
console.error('Սխալ է տեղի ունեցել:', error);
};
Սերվերի պատասխանն պետք է ունենա MIME-տիպ text/event-stream և ձևաչափվի հետևյալ կերպ՝
data: Սա առաջին տողն է տվյալների\n
data: Սա երկրորդ տողն է\n\n
Յուրաքանչյուր հաղորդագրություն ավարտվում է երկու նոր տողանիշով (\n\n): Տվյալների յուրաքանչյուր տող սկսվում է data: -ով: Կարող են լինել նաև այլ դաշտեր, օրինակ՝ event:՝ իրադարձության տիպը նշելու համար կամ id:՝ հաղորդագրության նույնականացման համար:
Սերվերից ուղարկվող իրադարձությունները լավ ընտրություն են այն սցենարների համար, որտեղ սերվերը պետք է ուղարկի հաճախորդին թարմացումների հոսք, ինչպիսիք են ծանուցումները, նորությունների թերթերը, շուկայական գները կամ երկարաժամկետ գործընթացների արդյունքները: Նրանք ավելի պարզ են իրականացման համար, քան WebSockets-ը, մեկ ուղղությամբ կապի համար։