استخدام Swoole لإنشاء تطبيقات PHP عالية الأداء
ما هو Swoole؟
Swoole هو إطار عمل اتصالات شبكية عالي الأداء لـ PHP، يوفر وظائف غير تزامنية، ومتعددة الخيوط والتآزر، مما يسمح لـ PHP بمعالجة مهام عالية التزامن مثل Node.js. يدعم بروتوكولات متعددة مثل TCP وUDP وUnixSocket وHTTP وWebSocket، وهو مناسب لبناء خوادم ويب عالية الأداء، وهياكل الخدمات الدقيقة، وأنظمة الاتصالات في الوقت الحقيقي.
الميزات الرئيسية والمزايا لـ Swoole
- عالي الأداء: تم كتابة Swoole بلغة C، مما يجعله عالي الأداء، ويدعم IO غير المتزامن والتآزر، ويستطيع معالجة طلبات عالية التزامن.
- وظائف غنية: يدعم بروتوكولات شبكية متعددة، وجداول زمنية، وإدارة العمليات، وإدارة الذاكرة، وما إلى ذلك، لتلبية مختلف الاحتياجات التطويرية.
- سهل الاستخدام: يوفر API سهل الاستخدام ووثائق غنية، تساعد المطورين على البدء بسرعة.
- قابل للتوسيع بدرجة عالية: يدعم التوسعات المخصصة والإضافات، وقابل للتكيف بشكل مرن حسب الاحتياجات.
Swoole هو الخيار المثالي لبناء تطبيقات ويب عالية الأداء وأنظمة الاتصالات في الوقت الحقيقي، ويناسب مشاريع من التطبيقات الصغيرة إلى الأنظمة المؤسسية الكبيرة.
تثبيت Swoole
في هذه المقالة، سنقدم كيفية تثبيت واستخدام Swoole في بيئة ServBay.
TIP
ينصح ServBay المطورين بوضع موقع الويب في دليل /Applications/ServBay/www
لتسهيل الإدارة.
الخطوة 1: تثبيت إضافة Swoole
تمكين إضافة Swoole
تم تضمين إضافة Swoole مسبقاً في ServBay، ويحتاج المستخدم إلى تمكينها ثم إعادة تشغيل PHP. الرجاء الرجوع إلى كيفية تمكين وحدة Swoole المضمنة في ServBay لتمكين وحدة Swoole.
الخطوة 2: إنشاء دليل المشروع
أنشئ دليل المشروع وادخل:
cd /Applications/ServBay/www
mkdir servbay-swoole-app
cd servbay-swoole-app
2
3
الخطوة 3: إنشاء سكريبت خادم Swoole
في دليل المشروع، أنشئ ملف server.php
وكتب خادم HTTP بسيط باستخدام Swoole:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
$server = new Server("0.0.0.0", 9501);
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
});
$server->on("request", function (Request $request, Response $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello ServBay!");
});
$server->start();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
الخطوة 4: تشغيل خادم Swoole
في الطرفية، شغّل الأمر التالي لبدء خادم Swoole:
php server.php
سترى الإخراج التالي:
Swoole HTTP server is started at http://0.0.0.0:9501
الخطوة 5: الوصول إلى خادم Swoole
افتح المتصفح، وزُر http://localhost:9501
، سترى الصفحة تعرض Hello ServBay!
.
استخدام Swoole لمعالجة اتصالات WebSocket
Swoole يدعم أيضاً بروتوكول WebSocket، ويمكن استخدامه لإنشاء تطبيقات الاتصالات في الوقت الحقيقي. سنقدم كيفية استخدام Swoole لمعالجة اتصالات WebSocket.
إنشاء سكريبت خادم WebSocket
في دليل المشروع، أنشئ ملف websocket_server.php
وكتب خادم WebSocket بسيط:
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
$server = new Server("0.0.0.0", 9502);
$server->on("start", function (Server $server) {
echo "Swoole WebSocket server is started at ws://0.0.0.0:9502\n";
});
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
});
$server->on("message", function (Server $server, Frame $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, "Hello, {$frame->data}");
});
$server->on("close", function ($ser, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
تشغيل خادم WebSocket
في الطرفية، شغّل الأمر التالي لبدء خادم WebSocket:
php websocket_server.php
سترى الإخراج التالي:
Swoole WebSocket server is started at ws://0.0.0.0:9502
الاتصال بخادم WebSocket
يمكنك استخدام عميل WebSocket في المتصفح أو أدوات عملاء WebSocket أخرى (مثل wscat
) للاتصال بخادم WebSocket.
استخدام wscat
للاتصال
تثبيت
wscat
:bashnpm install -g wscat
1الاتصال بخادم WebSocket:
bashwscat -c ws://localhost:9502
1إرسال رسالة:
bash> Hello ServBay
1
سترى الخادم يرد بالرسالة:
< Hello, Hello ServBay
من خلال هذه الخطوات، نجحت في إنشاء وتشغيل مشروع Swoole واستخدام ميزات Swoole لمعالجة طلبات HTTP واتصالات WebSocket. يجمع Swoole بين الأداء العالي والوظائف الغنية، مما يجعله الخيار المثالي لإنشاء تطبيقات متزامنة عالية الأداء.