HTML Server-Sent Events API

সার্ভার থেকে বার্তাগুলিকে ওয়েব পেজে পুশ করা

HTML Server-Sent Events API

সার্ভার-প্রেরিত ইভেন্টস (SSE) API একটি HTTP সংযোগের মাধ্যমে একটি সার্ভার থেকে একটি ওয়েব পৃষ্ঠায় বার্তা/আপডেট পুশ করার অনুমতি দেয়৷

সার্ভার-প্রেরক ইভেন্ট - একমুখী বার্তাপ্রেরণ

একটি সার্ভার-প্রেরক ইভেন্ট হল যখন একটি ওয়েব পৃষ্ঠা স্বয়ংক্রিয়ভাবে সার্ভার থেকে বার্তা/আপডেট গ্রহণ করে।

সাধারণত, একটি ওয়েব পৃষ্ঠা সার্ভার থেকে ডেটার অনুরোধ করে, কিন্তু সার্ভার-প্রেরিত ইভেন্টগুলির সাথে আপডেটগুলি স্বয়ংক্রিয়ভাবে পুশ করা হয়।

উদাহরণ: Facebook/Twitter আপডেট, স্টক মার্কেট আপডেট, নিউজ ফিড, খেলার ফলাফল ইত্যাদি।

ব্রাউজার সমর্থন

সারণীতে থাকা সংখ্যাগুলি সার্ভার-ডিসপ্যাচড ইভেন্ট API-কে সম্পূর্ণরূপে সমর্থন করার জন্য প্রথম ব্রাউজার সংস্করণকে উপস্থাপন করে।

API Chrome Edge Firefox Safari Opera
SSE 6.0 79.0 6.0 5.0 11.5

সার্ভার-প্রেরক ইভেন্ট বিজ্ঞপ্তি প্রাপ্তি

ইভেন্টসোর্স অবজেক্টটি সার্ভার-প্রেরিত ইভেন্ট বিজ্ঞপ্তিগুলি পেতে ব্যবহৃত হয়:

উদাহরণ

<script> const x = document.getElementById("ফলাফল"); // ব্রাউজার SSE সমর্থন চেক করুন if(typeof(EventSource) !== "অনির্ধারিত") { var উৎস = নতুন ইভেন্ট সোর্স("demo_sse.php"); source.onmessage = ফাংশন(ইভেন্ট) { x.innerHTML += event.data + "<br>"; }; } অন্য { x.innerHTML = "দুঃখিত, সার্ভার-প্রেরিত ইভেন্টগুলির জন্য কোন সমর্থন নেই।"; } </script>

উদাহরণ বর্ণনা:

  1. একটি নতুন ইভেন্টসোর্স অবজেক্ট তৈরি করুন এবং পৃষ্ঠার URL নির্দিষ্ট করুন যা আপডেট পাঠাবে (এই উদাহরণে "demo_sse.php")।
  2. প্রতিবার আপডেট পাওয়া গেলে,onmessageঘটনা ঘটে
  3. onmessageঘটনা ঘটলে, প্রাপ্ত তথ্যid="result"উপাদানে এটি রাখুন

ব্রাউজার সমর্থন পরীক্ষা করুন

উপরের উদাহরণে সার্ভার-প্রেরিত ইভেন্টগুলির জন্য ব্রাউজার সমর্থন পরীক্ষা করার জন্য কোডের কয়েকটি অতিরিক্ত লাইন অন্তর্ভুক্ত করা হয়েছে:

উদাহরণ

if(typeof(EventSource) !== "অনির্ধারিত") { // হ্যাঁ! সার্ভার-প্রেরণ ইভেন্টের জন্য সমর্থন! // কিছু কোড..... } অন্য { // দুঃখিত! সার্ভার-প্রেরিত ইভেন্টগুলি সমর্থিত নয়। }

সার্ভার-সাইড কোড উদাহরণ

উপরের উদাহরণটি কাজ করার জন্য, আপনার একটি সার্ভার প্রয়োজন (যেমন PHP বা ASP) যেখানে আপনি ডেটা আপডেট পাঠাতে পারেন।

সার্ভার-সাইড ইভেন্ট স্ট্রিম সিনট্যাক্স সহজ। "কন্টেন্ট-টাইপ" শিরোনামকে "টেক্সট/ইভেন্ট-স্ট্রীম" এ সেট করুন। এখন আপনি ইভেন্ট স্ট্রীম পাঠানো শুরু করতে পারেন.

PHP-এ কোড (demo_sse.php):

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$time = date('r');
echo "data: The server time is: {$time}\\n\\n";
flush();
?>

ASP (VB) (demo_sse.asp) এর কোড:

<%
Response.ContentType = "text/event-stream"
Response.Expires = -1
Response.Write("data: The server time is: " & now())
Response.Flush()
%>

কোড বর্ণনা:

  1. "কন্টেন্ট-টাইপ" শিরোনামকে "টেক্সট/ইভেন্ট-স্ট্রীম" এ সেট করুন।
  2. নির্দিষ্ট করুন যে পৃষ্ঠাটি ক্যাশে করা উচিত নয়
  3. পাঠানোর জন্য ডেটা আউটপুট করুন (সর্বদা "ডেটা:" দিয়ে শুরু করুন)
  4. ওয়েব পেজে আউটপুট ডেটা পুশ করুন

ইভেন্টসোর্স অবজেক্ট

উপরের উদাহরণগুলিতে বার্তাগুলি গ্রহণ করতেonmessageআমরা ইভেন্ট ব্যবহার করেছি কিন্তু অন্যান্য ইভেন্টগুলিও পাওয়া যায়:

onopen

যখন সার্ভারের সাথে একটি সংযোগ খোলা হয়

onmessage

যখন একটি বার্তা পাওয়া যায়

onerror

যখন একটি ত্রুটি ঘটে

SSE vs AJAX Polling

Server-Sent Events

  • একমুখী যোগাযোগ (সার্ভার → ক্লায়েন্ট)
  • স্থায়ী HTTP সংযোগ
  • স্বয়ংক্রিয় আপডেট
  • কম বিলম্ব
  • কম ব্যান্ডউইথ ব্যবহার
  • স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ করুন

AJAX Polling

  • দ্বিমুখী যোগাযোগ
  • পৃথক অনুরোধ
  • ক্রমাগত অনুরোধ প্রয়োজন
  • খুব বেশি বিলম্ব
  • উচ্চ ব্যান্ডউইথ ব্যবহার
  • ম্যানুয়াল রিলিঙ্কিং

ইন্টারেক্টিভ অনুশীলন

সার্ভার-প্রেরণ ইভেন্ট পদ্ধতি

সার্ভারের সাথে সংযুক্ত নয়

নীচের বোতামে ক্লিক করুন এবং সার্ভারের সাথে সংযোগ করুন। সার্ভার সংযোগ অবস্থা এবং টাইমস্ট্যাম্প প্রদর্শিত হয়.

সার্ভার বার্তা এখানে প্রদর্শিত হয়...

সিন্থেটিক সার্ভার:

এই অনুশীলনে, আমরা একটি সিন্থেটিক সার্ভার ব্যবহার করি যা প্রতি 2 সেকেন্ডে ফরোয়ার্ড টাইমস্ট্যাম্প পাঠায়। একটি বাস্তব অ্যাপ্লিকেশনে, এটি প্রকৃত সার্ভার প্রতিস্থাপন করবে।

অনুশীলন করুন

সার্ভার-প্রেরিত ইভেন্টগুলির জন্য সঠিক "কন্টেন্ট-টাইপ" শিরোনামটি কী?

application/json
✗ ভুল! অ্যাপ্লিকেশন/জেসন AJAX অনুরোধের জন্য ব্যবহৃত হয়, SSE নয়
text/event-stream
✓ ঠিক আছে! টেক্সট/ইভেন্ট-স্ট্রীম হল সার্ভার-প্রেরিত ইভেন্টের জন্য সঠিক বিষয়বস্তুর ধরন
text/html
✗ ভুল! এইচটিএমএল পৃষ্ঠাগুলির জন্য পাঠ্য/এইচটিএমএল ব্যবহার করা হয়, SSE নয়