English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

أحداث إرسال الخادم في HTML5

يُمكن لإشعارات الحدث في HTML5 لخدمة الحدث الحصول على أحدث البيانات من الخادم دون تحديث الصفحة، مما يتيح الحصول على أحدث البيانات بشكلديناميكي.

إشعارات الحدث المرسلة من الخادم - نقل رسائل أحادي الاتجاه

تمثل إشعارات الحدث المرسلة من الخادم حصول الصفحة على تحديثات بيانات من الخادم.

تمثل الطريقة التقليدية للحصول على أحدث بيانات الخادم من خلال تحديث الصفحة أو استخدام جهاز تقسيم الوقت للحصول على أحدث البيانات.

مثال: تحديثات فيسبوك/تويتر، أسعار الأسهم، تغريدات، نتائج الرياضة، رسائل حية، تعليقات، إلخ.

دعم المتصفحات

يدعم جميع المتصفحات الرئيسية إشعارات الحدث المرسلة من الخادم باستثناء متصفح إنترنت إكسبلورر.

استقبال إشعارات الحدث المرسلة من الخادم

يستخدم جسم EventSource لاستقبال إشعارات الحدث التي يرسلها الخادم:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليمي أساسي (oldtoolbag.com)</title>
</head>
<body>
<h1>الحصول على أحدث بيانات من الجانب السيرفرية</h1>
<div id="result"></div>
<script>
if(typeof(EventSource)!=="undefined")
{
    var source=new EventSource("demo-sse.php");
    source.onmessage=function(event)
    {
        document.getElementById("result").innerHTML+=event.data + "<br>";
    };
}
else
{
    document.getElementById("result").innerHTML="آسف، متصفحك لا يدعم أحداث server-sent...";
}
</script>
</body>
</html>
اختبر هذا لـ ‹/›

تفسير المثال:

  • أنشئ جسمًا جديدًا من EventSource، ثم قم بتحديد عنوان URL للصفحة التي يتم فيها إرسال التحديثات (في هذا المثال هو "demo_sse.php")

  • عند استقبال تحديث جديد، يحدث أحداث onmessage

  • عند حدوث أحداث onmessage، قم بإرسال البيانات التي تم استقبالها إلى العنصر الذي يحمل الـ id "result"

تحقق من دعم تسلسل الحدثات المرسلة من السيرفر

في هذا المثال، كتبنا كودًا إضافيًا للتحقق من دعم المتصفح لتسلسل الحدثات المرسلة من السيرفر:

if(typeof(EventSource)!=="undefined")
{
    // يدعم المتصفح Server-Sent
    // بعض الكود.....
}
else
{
    // لا يدعم المتصفح Server-Sent..
}

مثال على الكود السيرفرية

للحصول على مثال أعلاه يعمل، تحتاج أيضًا إلى إمكانية إرسال تحديثات البيانات من السيرفر (مثل PHP وASP).

قواعد اللغة السيرفرية لمسارات الحدث بسيطة جدًا. قم بتعيين رأس "Content-Type" إلى "text/event-stream". الآن، يمكنك البدء في إرسال مسارات الحدث.

مثال على الخط

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$time = date('r');
echo "data: The server current time: {$time}\n\n";
flush();
?>

كود ASP (VB) (demo_sse.asp):

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

توضيح الكود:

  • ضبط عنوان الرأس "Content-Type" إلى "text/event-stream"

  • تحديد عدم حفظ الصفحة في المخزن المؤقت

  • إخراج تاريخ الإرسال (يبدأ دائمًا بـ "data: ")

  • إخراج بيانات تحديث الصفحة

مثلجة EventSource

في المثال أعلاه، نستخدم حدث onmessage للحصول على الرسائل. ولكن يمكن استخدام أحداث أخرى:

حدثوصف
onopenعند فتح الاتصال بالخادم
onmessageعند استقبال رسالة
onerrorعند حدوث خطأ