علي الكاسر نشر 25 يونيو 2021 أرسل تقرير نشر 25 يونيو 2021 السلام عليكم قريبا تعلمت هذه التقنيه Server Sent Events سؤالي هل اذا جربت الاكواد خاصتها مباشره هل تتسبب بالضغط على السيرفر مما يؤدي الى اغلاقه خاصه اذا كان زوار الموقع بالالاف، وهل يمكن اذا استعملناها في جلب البيانات من الداتا بيز وارسالها للمتصفح هل هذا سيؤثر ايضا على السيرفر وماهي الحلول في حال كانت الاجوبة بنعم 1 اقتباس
0 Nuhla Almasri نشر 25 يونيو 2021 أرسل تقرير نشر 25 يونيو 2021 نظام الSSE ليس لتعديل البيانات و بعث بيانات يعتبر نظام الSSE مثال على إرسال البيانات من إتجاه واحد فقط من ناحية الServer فقط لذلك لا يمكنك إرسال أي معلومات الى السيرفير سوى للقيام بعمل HandChaking أي خلق أتصال بين السيرفر و التطبيق مثال على أستعمال هذه الطريقة هي Notification أي جلب أي معلومات يتم تحديثها بأستمرار . نظام الSEE يشبه كثيرا ال WebSocket الا أن WebSockets تختلف بحيث أنها ترسل و تستقبل معلومات من و إالى السيرفر أما الSSE فقط يرسل من السيرفير الى التطبيق و أن أرسلت معلومات زائدة عن رقم ال CLIENT أو إسم الEVENT .. الخ, فسوف يتم تجاهلها عملية إرسال المعلومات من السيرفير الى التطبيق عدة مرات لن يقوم بغلق السيرفير و لن يكون تدفق المعلومات عبئ على الشبكة بحيث أنه لن يتم إرسال المعلومات من السيرفير الى المتصفح أو الهاتف بشكل مستمر بالرغم من أن الأتصال يبقى مفتوح بحيث أولا لا يوجد أرسال سوى بأتجاه واحد فقط كما أن عملية التصافح HandChacking تحدث مرة واحدة فقط و أيضا الأتصال ممكن أن يتم أيقافه مؤقتا إن لم يكن المستخدم active لذلك لن يكون هناك تاثير كبير على عمل السيرفير أن كان هنالك الألاف من الستخدمين و لهذه المشكلة تم تصميم هذه النظام اقتباس
0 علي الكاسر نشر 26 يونيو 2021 الكاتب أرسل تقرير نشر 26 يونيو 2021 بتاريخ 12 ساعات قال Nuhla Almasri: أن أرسلت معلومات زائدة عن رقم ال CLIENT أو إسم الEVENT .. الخ, فسوف يتم تجاهلها ممكن توضيح لهذه الجزئية لم افهمها ماهو هذا الرقم او اسم الحدث 1 اقتباس
0 Nuhla Almasri نشر 27 يونيو 2021 أرسل تقرير نشر 27 يونيو 2021 بتاريخ 23 ساعات قال علي الكاسر: ممكن توضيح لهذه الجزئية لم افهمها ماهو هذا الرقم او اسم الحدث // هكذا يتم تعريف الSSE // من جهة السيرفير لاحظ أنه لا يستقبل أي داتا و ضمنيا فقط يستقبل رقم المستخدم و أسم الأيفينت // هنا تعريف الEventHandler // لل SSE function eventsHandler(request, response, next) { const headers = { 'Content-Type': 'text/event-stream', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache' }; response.writeHead(200, headers); const data = `data: ${JSON.stringify(facts)}\n\n`; response.write(data); const clientId = Date.now(); // هنا نقوم بإعطاء المستخدم ID // و يتم المصادقة فقط مره واحدة const newClient = { id: clientId, response }; clients.push(newClient); request.on('close', () => { console.log(`${clientId} Connection closed`); clients = clients.filter(client => client.id !== clientId); }); } // و هنا نستخدم أسم ال EVENTHANDLER // الذي نريد تنفيدذه app.get('/events', eventsHandler); و من جهة المستخدم يقوم بإستدعاء الدالة مرارا و تكرار حسب إسم الروات التي تقوم بأستدعاء الSSE eventHandler اقتباس
0 علي الكاسر نشر 27 يونيو 2021 الكاتب أرسل تقرير نشر 27 يونيو 2021 بتاريخ On 6/27/2021 at 13:19 قال Nuhla Almasri: من جهة المستخدم يقوم بإستدعاء الدالة مرارا و تكرار حسب إسم الروات التي تقوم بأستدعاء الSSE eventHandler انا استخدم هذا الكود وسغال معي ولا توجد به مشاكل ولكن هل يمكنني الاعتماد عليه، الكود الذي ارسلتيه يختلف عن هذا كثير ومعقد جدا <?php set_time_limit(0); // لايوجد اقصى مدة للطلب header("Content-Type: text/event-stream"); $viewd = 0; // عدد الرسائل التي عرضت لمنع إرسال الرسالة اكثر من مرة $lastFileSize = 0; // حجم الملف عندما يتغير فان هناك رسالة ارسلت while(true){ if(filesize("data.json") >= $lastFileSize){// التحديث فقط عند تغير حجم الملف $messages = json_decode(file_get_contents("data.json")); // قراءة الرسائل for($i=$viewd;$i<=sizeof($messages)-1;$i++){ // حلقة تكرار من أخر رسالة مُرسلة echo "data: ".json_encode($messages[$i]).PHP_EOL; echo PHP_EOL; } $viewd = sizeof($messages); // تحديث عدد الرسائل المرسلة $lastFileSize = filesize("data.json"); // تحديث مُتغير أخر حجم للملف } ob_flush(); flush(); sleep(1); } ?> اقتباس
0 Nuhla Almasri نشر 27 يونيو 2021 أرسل تقرير نشر 27 يونيو 2021 أنت تستخدم الPHP و أختلاف طريقة كتابة الكود لا يختلف بأستعماله لكل لغة طريقة معينىة بتطبيق نفس الكود ما ارسلته انا هو بال Javascript , nodeJs لكن المهم أن الطريقة المستخدمة تخدمك فقط لأستدعاء بيانات من السيرفير و ليس لأرسال أو تعديل البينات بالسيرفير وإن أحتجت لتعديل أو أرسال بيانات ستحتاج الى أستعمال http Request. أستخدام الSSE هو لتقليل الثقل على السيرفر كما ذكرنا و هذا ما انت تريده 1 اقتباس
0 علي الكاسر نشر 27 يونيو 2021 الكاتب أرسل تقرير نشر 27 يونيو 2021 بتاريخ 3 ساعات قال Nuhla Almasri: أنت تستخدم الPHP و أختلاف طريقة كتابة الكود لا يختلف بأستعماله لكل لغة طريقة معينىة بتطبيق نفس الكود ما ارسلته انا هو بال Javascript , nodeJs لكن المهم أن الطريقة المستخدمة تخدمك فقط لأستدعاء بيانات من السيرفير و ليس لأرسال أو تعديل البينات بالسيرفير وإن أحتجت لتعديل أو أرسال بيانات ستحتاج الى أستعمال http Request. أستخدام الSSE هو لتقليل الثقل على السيرفر كما ذكرنا و هذا ما انت تريده هذا ما اود سماعه شكرا لك 1 اقتباس
السؤال
علي الكاسر
السلام عليكم
قريبا تعلمت هذه التقنيه Server Sent Events
سؤالي هل اذا جربت الاكواد خاصتها مباشره هل تتسبب بالضغط على السيرفر مما يؤدي الى اغلاقه خاصه اذا كان زوار الموقع بالالاف، وهل يمكن اذا استعملناها في جلب البيانات من الداتا بيز وارسالها للمتصفح هل هذا سيؤثر ايضا على السيرفر
وماهي الحلول في حال كانت الاجوبة بنعم
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.