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-ის დაგვიანება მილიწამებში