مثال بسيط للتطوير
التثبيت
تثبيت 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");
// تشغيل 4 عمليات لتقديم الخدمة
$http_worker->count = 4;
// عند تلقي البيانات من المتصفح، رد بـ hello world للمتصفح
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// إرسال hello world للمتصفح
$connection->send('hello world');
};
// تشغيل العامل
Worker::runAll();
تشغيل سطر الأوامر (استخدم cmd命令行 لمستخدمي Windows، نفس الشيء هنا)
php start.php start
اختبار
إذا كان عنوان IP للخادم هو 127.0.0.1
قم بزيارة URL في المتصفح http://127.0.0.1:2345
ملاحظة:
-
إذا حدثت مشكلة في الوصول، يرجى الرجوع إلى قسم أسباب فشل اتصال العميل للتدقيق.
-
الخادم يستخدم بروتوكول 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");
// تشغيل 4 عمليات لتقديم الخدمة
$ws_worker->count = 4;
// عند تلقي بيانات من العميل، رد بـ hello $data للعميل
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// إرسال hello $data للعميل
$connection->send('hello ' . $data);
};
// تشغيل العامل
Worker::runAll();
تشغيل سطر الأوامر
php ws_test.php start
اختبار
افتح متصفح chrome، اضغط F12 لفتح وحدة التحكم، في القسم Console أدخل (أو ضع الكود أدناه في صفحة HTML واستخدم js للتشغيل)
// افترض أن عنوان 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);
};
ملاحظة:
-
إذا حدثت مشكلة في الوصول، يرجى الرجوع إلى قسم المشاكل الشائعة في الدليل - فشل الاتصال للتدقيق.
-
الخادم يستخدم بروتوكول 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");
// تشغيل 4 عمليات لتقديم الخدمة
$tcp_worker->count = 4;
// عند تلقي بيانات من العميل
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// إرسال hello $data للعميل
$connection->send('hello ' . $data);
};
// تشغيل العامل
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
ملاحظة:
-
إذا حدثت مشكلة في الوصول، يرجى الرجوع إلى قسم المشاكل الشائعة في الدليل - فشل الاتصال للتدقيق.
-
الخادم يستخدم بروتوكول TCP الخام، ولا يمكن استخدام بروتوكولات websocket أو http للتواصل مباشرة.