رفتن به مطلب

دریافتirSSE


امین مهدی نژاد

ارسال‌های توصیه شده

در ۱۴۰۱/۱/۲۹ در 00:20، سید رضا گفته است:

لطفا php های مربوطه رو هم پیوست کنید 

در زیر تعدادی از پروژه های گیتهاب مفید رو لینک میکنم.

ساده ترین مثال در زیر

https://github.com/limweb/ssephp

https://github.com/tuanpht/sse-demo

اینم نمونه چت

https://github.com/lcherone/sse-chat-example

نمونه رابط WEBRTC

https://github.com/nielsbaloe/webrtc-php

https://github.com/hajertamas/sse-server

اینم مثال دیگه ای

https://github.com/rdeeceria/ssecrud

 

بعدا سر فرصت توضبحاتی برای راه اندازی یک مثال با توضیحات بیان خواهم نمود

لینک ارسال
به اشتراک گذاری در سایت های دیگر

آموزش کدنویسی سمت PHP

مثال زیر را در نظر بگیرید.

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

$counter = rand(1, 10);
while (true) {
  // Every second, send a "ping" event.

  echo "event: ping\n";
  echo "id: $counter\n";
  $curDate = date(DATE_ISO8601);
  echo 'data: {"time": "' . $curDate . '"}';
  echo "\n\n";

 ob_end_flush();
  flush();
  
  
  $counter--;

  if (!$counter) break;

 

  // Break the loop if the client aborted the connection (closed the page)

  if ( connection_aborted() ) break;

  sleep(1);
}

دو خط ابتدایی کد تنظیم نوع ارسال دیتا میباشد که همیشه آنرا قرار دهید

header("Cache-Control: no-store");
header("Content-Type: text/event-stream");

اکنون به while دقت کنید که مقدار true دارد. در اینجا حلقه ای بی نهایت ساخته شده تا روند اجرا به انتهای کدها نرسیده و مدام ادامه داشته باشد. شما خودتان می توانید با شرطهایی در صورت نیاز آنرا به پایان برسانید و یا از سمت کاربر با قطع ارتباط این روند را خاتمه ببخشید. که این مورد در خط های انتهایی با این کد تعین شده است

 if ( connection_aborted() ) break;

حال به sleep در انتهای کدها دقت کنید این کد سبب میشود که یک ثانیه بین اجرای هرباره حلقه تاخیر بیوفتد

کدهای ارسال پیام

به این کدها دقت کنید

 echo "event: ping\n";
  echo "id: $counter\n";
  $curDate = date(DATE_ISO8601);
  echo 'data: {"time": "' . $curDate . '"}';
  echo "\n\n";

رویداد ping باید همنام ساب فراخوان در بیسیک باشد. مانند

Public Sub ping(id As Object,data As Object)
End Sub

بعد هم آی دی و دیتای ارسالی را مشخص کرده ایم.

دقت کنید که در انتهای هر بخش به خط بعدی منتقل شده و بعد از دیتا دوبار این روند تکرار شده است

در انتهای داده های ارسالی هم حتما کدهای زیر را مانند مثال قرار دهید تا اطلاعات به کلاینت به درستی ارسال شوند.

ob_end_flush();
flush();

نکته مهم:

در php برای هر اتصال کاربر یکبار سورس اجرا میشود. و این برخلاف زبانی مثل جاوااسکریپت است. در جاوااسکریپت کد ما میتواند لیست تمام کاربران را در آرایه ای ذخیره کند. ولی در php ما دیتای قابل ارسال را در فضایی جدا مثل دیتابیس و یا فایل ها ذخیره کنیم. در MySQL نوعی جدول مناسب این روند وجود دارد بنام مموری که با ساخت آن میتوان دیتا را به سرعت بازیابی و یا ذخیره نمایید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 2 هفته بعد...

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
  • اضافه کردن...