مثال بسيط للتطوير
التثبيت
تثبيت workerman
استخدم الأمر التالي في مجلد فارغ
composer require workerman/workerman
المثال الأول: تقديم خدمة الويب باستخدام بروتوكول HTTP
إنشاء ملف start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// إنشاء Worker يستمع على المنفذ 2345، ويستخدم بروتوكول http
$http_worker = new Worker("http://0.0.0.0:2345");
// تشغيل ٤ عمليات لتقديم الخدمة للعملاء
$http_worker->count = 4;
// عند استقبال البيانات المرسلة من المتصفح، ترد بكلمة "hello world" للمتصفح
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// إرسال كلمة "hello world" إلى المتصفح
$connection->send('hello world');
};
// تشغيل الـ worker
Worker::runAll();
تشغيل من خلال سطر الأوامر (لمستخدمي ويندوز استخدام سطر الأوامر cmd، وهكذا)
php start.php start
الاختبار
فرض أن عنوان IP الخادم هو 127.0.0.1
افتح المتصفح واستخدم الرابط http://127.0.0.1:2345
ملاحظة:
1 - إذا حدثت مشكلة في الوصول، يُرجى الرجوع إلى القسم أسباب فشل اتصال العميل للتحقق.
2 - الخادم يستخدم بروتوكول http فقط ولا يمكن التواصل مباشرة باستخدام بروتوكول WebSocket أو أي بروتوكول آخر.
المثال الثاني: تقديم خدمة باستخدام بروتوكول WebSocket
إنشاء ملف ws_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// ملاحظة: هنا يختلف الأمر عن المثال السابق، إذ يتم استخدام بروتوكول WebSocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// تشغيل ٤ عمليات لتقديم الخدمة للعملاء
$ws_worker->count = 4;
// عند استقبال بيانات من العميل، يتم إرجاع كلمة "hello $data" للعميل
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// إرسال "hello $data" للعميل
$connection->send('hello ' . $data);
};
// تشغيل الـ worker
Worker::runAll();
تشغيل من خلال سطر الأوامر
php ws_test.php start
الاختبار
افتح متصفح Chrome، ثم استخدم F12 لفتح لوحة التحكم، ثم استخدم الكونسول لإدخال (أو قم بتضمين الكود التالي في صفحة HTML وتشغيله باستخدام JavaScript)
// فرض أن عنوان IP الخادم هو 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("تم الاتصال بنجاح");
ws.send('tom');
alert("تم إرسال سلسلة نصية إلى الخادم: tom");
};
ws.onmessage = function(e) {
alert("تم استقبال رسالة من الخادم: " + e.data);
};
ملاحظة:
1 - إذا حدثت مشكلة في الوصول، يُرجى الرجوع إلى قسم الأسئلة الشائعة - فشل اتصال العميل للتحقق.
2 - الخادم يستخدم بروتوكول WebSocket فقط ولا يمكن التواصل مباشرة باستخدام بروتوكول HTTP أو أي بروتوكول آخر.
المثال الثالث: الاتصال مباشرة باستخدام TCP لنقل البيانات
إنشاء ملف tcp_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// إنشاء Worker يستمع على المنفذ 2347، ولا يستخدم أي بروتوكول طبقة تطبيقية
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// تشغيل ٤ عمليات لتقديم الخدمة للعملاء
$tcp_worker->count = 4;
// عندما يصل البيانات من العميل
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// إرسال "hello $data" للعميل
$connection->send('hello ' . $data);
};
// تشغيل الـ worker
Worker::runAll();
تشغيل من خلال سطر الأوامر
php tcp_test.php start
الاختبار: تشغيل من خلال سطر الأوامر
(النتائج التالية تظهر في سطر الأوامر لنظام Linux، وتختلف قليلا في نظام Windows)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom
ملاحظة:
1 - إذا حدثت مشكلة في الوصول، يُرجى الرجوع إلى قسم الأسئلة الشائعة - فشل اتصال العميل للتحقق.
2 - الخادم يستخدم بروتوكول TCP فقط ولا يمكن التواصل مباشرة باستخدام بروتوكول WebSocket أو بروتوكول HTTP أو أي بروتوكول آخر.