Sobes.tech
Middle

რატომ შემოიღეს HTML5-ში server-sent მოვლენები?

sobes.tech AI

პასუხი AI-სგან

სერვერიდან გამოგზავნილი მოვლენები (SSE) შემოიღო HTML5-ში, რათა სერვერიდან მომხმარებელზე მონაცემები ერთმხრივად, რეალურ დროში, HTTP კავშირის მეშვეობით გადმოიცეს. ეს საშუალებას აძლევს მიიღოთ განახლებები სერვერიდან, მომხმარებლის მუდმივი მოთხოვნების (პოლინგის) გარეშე. ძირითადი უპირატესობები სხვა ტექნოლოგიებთან შედარებით:

  • სადამსუბუქო: გამოიყენება ჩვეულებრივი HTTP კავშირი, რაც ამარტივებს ინტეგრაციას არსებული ვებ-ტექნოლოგიებისა და ინფრასტრუქტურისთან.
  • ეფექტურობა: სერვერი აგზავნის მონაცემებს, როდესაც ისინი მზადაა, ამცირებს ქსელის და სერვერის დატვირთვას, შედარებით ხშირი პოლინგისას.
  • ავტომატური გადაერთება: ბრაუზერი ავტომატურად ცდილობს კავშირის აღდგენას გაწყვეტის შემთხვევაში.
  • შენაშენული დამუშავება: EventSource API ბრაუზერში უზრუნველყოფს მარტივ ინტერფეისს მოვლენებისა და მონაცემების სამუშაოდ.

მომხმარებლის მხრიდან გამოყენების მაგალითი:

// ახალი 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: ეს პირველი მონაცემი

data: ეს მეორე მონაცემი

ყოველი შეტყობინება მთავრდება ორი ახალი ხაზით (\n\n). თითოეული მონაცემის ხაზი იწყება data: -ით. შეიძლება იყოს სხვა ველები, მაგალითად, event: — მოვლენის ტიპის მითითებისთვის ან id: — შეტყობინების იდენტიფიკაციისთვის.

Server-sent events არის კარგი არჩევანი იმ სცენარებისთვის, სადაც სერვერი უნდა გაუგზავნოს მომხმარებელს მონაცემთა ნაკადი, როგორიცაა შეტყობინებები, სიახლეების ფიდები, აქციების კოტირებები ან ხანგრძლივი პროცესების შედეგები. ისინი უფრო მარტივია განხორციელებისთვის, ვიდრე WebSockets, ერთმხრივი კავშირისათვის.