مكتبة WebSocket Ratchet: إنشاء الوقت الفعلي في PHP

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة WebSocket Ratchet لـ PHP: إنشاء تطبيقات الوقت الفعلي



WebSocket هو بروتوكول يوفر اتصالاً ثنائي الاتجاه بين العميل والخادم عبر اتصال دائم واحد. على عكس HTTP التقليدي، حيث يفتح كل طلب اتصالاً جديداً، يسمح WebSocket بنقل البيانات في الوقت الفعلي دون تأخير. بالنسبة لـ PHP، واحدة من أشهر المكتبات للعمل مع WebSocket هي Ratchet. هذه المكتبة مبنية على أساس ReactPHP وتوفر واجهة برمجة تطبيقات بسيطة وقوية لإنشاء خوادم WebSocket.



ما هي Ratchet؟



Ratchet هي مكتبة PHP مفتوحة المصدر تتيح للمطورين إنشاء تطبيقات الوقت الفعلي مثل الدردشات والإشعارات والألعاب عبر الإنترنت وأنظمة المراقبة. تقوم بتجريد تعقيد العمل مع المقابس (sockets) والإدخال/الإخراج غير المتزامن، وتوفير فئات وواجهات مريحة.



الإمكانيات الرئيسية لـ Ratchet:

  • دعم WebSocket وفقاً لمواصفات RFC 6455
  • التكامل مع خوادم HTTP (على سبيل المثال، عبر ReactPHP)
  • إمكانية إنشاء معالجات رسائل مخصصة
  • دعم WAMP (بروتوكول مراسلة تطبيقات WebSocket) للنشر/الاشتراك (Pub/Sub)
  • خفيفة الوزن وأداء عالي


تثبيت Ratchet



يتم تثبيت المكتبة عبر Composer. نفذ في الطرفية:



composer require cboden/ratchet


بعد التثبيت، سيظهر في مشروعك مجلد vendor مع التبعيات الضرورية، بما في ذلك ReactPHP.



إنشاء خادم WebSocket بسيط



لننظر إلى مثال أساسي: سننشئ خادماً يقبل الاتصالات ويرسل رسالة ترحيبية مرة أخرى. لهذا، أنشئ ملفاً باسم server.php:



<?phprequire 'vendor/autoload.php';

use Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;

class MyWebSocket implements MessageComponentInterface { protected $clients;

public function __construct() { $this->clients = new \\SplObjectStorage; }

public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "اتصال جديد: {$conn->resourceId}"; $conn->send("مرحباً بك! معرفك: {$conn->resourceId}"); }

public function onMessage(ConnectionInterface $from, $msg) { echo "تم استلام رسالة من {$from->resourceId}: {$msg}"; // إرسال لجميع العملاء foreach ($this->clients as $client) { if ($from !== $client) { $client->send("رسالة من {$from->resourceId}: {$msg}"); } } }

public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "تم إغلاق الاتصال {$conn->resourceId}"; }

public function onError(ConnectionInterface $conn, \\Exception $e) { echo "خطأ: {$e->getMessage()}"; $conn->close(); }}

$server = IoServer::factory( new HttpServer( new WsServer( new MyWebSocket() ) ), 8080);

echo "خادم WebSocket قيد التشغيل على المنفذ 8080...";$server->run();


قم بتشغيل الخادم بالأمر:



php server.php


الآن الخادم يستمع على المنفذ 8080. للاختبار، يمكنك استخدام أي عميل WebSocket، مثل إضافة للمتصفح أو كود JavaScript بسيط.



الجزء العميل بلغة JavaScript



أنشئ ملف HTML باسم client.html:



<!DOCTYPE html><html><head>    <title>عميل WebSocket</title></head><body>    <input type="text" id="message" placeholder="أدخل                    

توصيات