Sobes.tech
Middle+

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

sobes.tech AI

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

მხოლოდ ერთმხრივი კავშირის არხის განხორციელებისთვის სერვერი და კლაიენტი შორის, სერვერი შეუძლია მონაცემების გადაცემა ნებისმიერ დროს კავშირის დამყარების შემდეგ:

ძირითადი მახასიათებლები და უპირატესობები:

  • ეფექტურობა: გამოიყენება ჩვეულებრივი HTTP-კავშირი, რაც მინიმუმამდე ამცირებს polling-ის ხარჯებს
  • მარტივობა: server-sent events (SSE) API უფრო მარტივია გამოყენებაში, ვიდრე WebSockets ერთმხრივი კავშირისათვის
  • ავტომატურიReconnect: ბრაუზერი ავტომატურად ცდილობსReconnect-ის განხორციელებას კავშირის გაწყვეტის შემდეგ
  • მონაცემთა ტიპების მხარდაჭერა: მხარდაჭერილია ტექსტური მონაცემების გადაცემა text/event-stream ფორმატში
  • ბრაუზერების მხარდაჭერა: ფართოდ მხარდაჭერილია თანამედროვე ბრაუზერებით

გამოყენება:

  • ახალი ამბების ლენტების რეალურ დროში განახლება
  • მოვლენების შეტყობინებები (მაგალითად, ახალი შეტყობინებები)
  • მონაცემების მონიტორინგი რეალურ დროში (მაგალითად, ბირჟის კოტირებები)
  • გრძელვადიანი დავალებების პროგრესის ჩვენება

ეს ალტერნატივაა ტრადიციულ polling-ს, სადაც კლაიენტი პერიოდულად სთხოვს სერვერს განახლებებს. WebSockets-ისგან განსხვავებით, SSE ერთმხრივი კავშირია, რაც ამარტივებს მისი გამოყენებას, როდესაც მონაცემები მხოლოდ სერვერიდან კლაიენტზე გადადის.

კლაიენტის მხარე (JavaScript) მაგალითი:

const eventSource = new EventSource('/events'); // URL სერვერიდან მოვლენების მისაღებად

eventSource.onmessage = function(event) {
  // მიღებული მონაცემების დამუშავება
  console.log('მიღებული შეტყობინება:', event.data);
};

eventSource.onerror = function(error) {
  // კავშირის შეცდომების დამუშავება
  console.error('Server-Sent Events შეცდომა:', error);
};

eventSource.addEventListener('customEvent', function(event) {
  // 'customEvent' ტიპის სპეციალური მოვლენის დამუშავება
  console.log('მიღებული სპეციალური მოვლენა:', event.data);
});

სერვერის მხრიდან მონაცემების ფორმატის მაგალითი:

event: customEvent
data: {"message": "გამარჯობა!"}

data: მარტივი ტექსტური შეტყობინება

id: 123 // მოვლენის იდენტიფიკატორი, ავტომატურიReconnect-ისთვის

retry: 5000 // შემდეგReconnect-ის დაგვიანება მილიწამებში