استخدام Swoole لإنشاء تطبيقات PHP عالية الأداء
ما هو Swoole؟
Swoole هو إطار عمل اتصالات شبكة عالي الأداء لـ PHP، يقدّم ميزات مثل البرمجة غير المتزامنة، والبرمجة المتعددة، والروتينات، مما يتيح لـ PHP التعامل مع المهام ذات التوازي العالي مثل Node.js. يدعم بروتوكولات متعددة مثل TCP وUDP وUnixSocket وHTTP وWebSocket، ويُستخدم لبناء خوادم ويب عالية الأداء، وتطبيقات البنية الدقيقة، وأنظمة الاتصال المباشر.
الميزات والفوائد الرئيسية لـ Swoole
- الأداء العالي: تم كتابة Swoole بلغة C، مما يضمن أداءً عاليًا ويدعم مدخلات ومخرجات غير متزامنة والروتينات، مما يتيح معالجة الطلبات ذات التوازي العالي.
- وظائف غنية: يدعم بروتوكولات شبكة متعددة، المؤقتات، إدارة العمليات، وإدارة الذاكرة لتلبية مختلف متطلبات التطوير.
- سهولة الاستخدام: يوفر واجهة برمجة تطبيقات سهلة الاستخدام ووثائق غنية لمساعدة المطوّرين على البدء بسرعة.
- توسع قوي: يدعم الامتدادات والمكونات الإضافية المخصصة، مما يتيح التخصيص المرن حسب الحاجة.
يعتبر Swoole خيارًا مثاليًا لإنشاء تطبيقات ويب وأنظمة اتصال مباشر عالية الأداء، ويناسب مختلف المشاريع من صغيرة إلى كبيرة على مستوى الشركات.
تثبيت Swoole
في هذا المقال، سنشرح كيفية تثبيت واستخدام Swoole في بيئة ServBay.
TIP
ينصح ServBay المُطوّرين بوضع مواقعهم في دليل /Applications/ServBay/www
لتسهيل الإدارة.
الخطوة 1: تفعيل تمديد Swoole
تفعيل تمديد Swoole
يحتوي ServBay بالفعل على Swoole، يحتاج المستخدمون فقط لتفعيله وإعادة تشغيل PHP. يرجى الرجوع إلى مقالة كيفية تفعيل وحدة Swoole المدمجة في ServBay لتفعيل وحدة Swoole.
الخطوة 2: إنشاء دليل المشروع
قم بإنشاء دليل المشروع والدخول إليه:
cd /Applications/ServBay/www
mkdir servbay-swoole-app
cd servbay-swoole-app
2
3
الخطوة 3: إنشاء سكربت خادم Swoole
قم بإنشاء ملف server.php
في دليل المشروع، وكتابة خادم Swoole HTTP بسيط:
<?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 لبناء تطبيق ويب
في هذا الجزء، سنشرح كيفية استخدام Swoole لبناء تطبيق ويب بسيط.
إنشاء المتحكمات والرواتر
قم بإنشاء دليل app
داخل دليل المشروع، ثم أنشئ أدلة controllers
و routes
بداخله:
mkdir -p app/controllers
mkdir -p app/routes
2
قم بإنشاء ملف HomeController.php
في دليل app/controllers
:
<?php
namespace App\Controllers;
class HomeController
{
public function index()
{
return "Welcome to ServBay!";
}
public function hello($name)
{
return "Hello, $name!";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
قم بإنشاء ملف web.php
في دليل app/routes
:
<?php
use App\Controllers\HomeController;
return [
'GET /' => [HomeController::class, 'index'],
'GET /hello/{name}' => [HomeController::class, 'hello'],
];
2
3
4
5
6
7
8
تحديث سكربت خادم Swoole
قم بتحديث ملف server.php
لإضافة منطق تحليل الرواتر واستدعاء المتحكمات:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
use FastRoute\RouteCollector;
use function FastRoute\simpleDispatcher;
require 'vendor/autoload.php';
$server = new Server("0.0.0.0", 9501);
$routes = require __DIR__ . '/app/routes/web.php';
$dispatcher = simpleDispatcher(function (RouteCollector $r) use ($routes) {
foreach ($routes as $route => $handler) {
list($method, $path) = explode(' ', $route);
$r->addRoute($method, $path, $handler);
}
});
$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) use ($dispatcher) {
$routeInfo = $dispatcher->dispatch($request->server['request_method'], $request->server['request_uri']);
switch ($routeInfo[0]) {
case \FastRoute\Dispatcher::NOT_FOUND:
$response->status(404);
$response->end('404 Not Found');
break;
case \FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
$response->status(405);
$response->end('405 Method Not Allowed');
break;
case \FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
$vars = $routeInfo[2];
list($class, $method) = $handler;
$response->header("Content-Type", "text/plain");
$response->end(call_user_func_array([new $class, $method], $vars));
break;
}
});
$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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
تثبيت FastRoute
قم بتشغيل الأمر التالي في دليل المشروع لتثبيت مكتبة التوجيه FastRoute:
composer require nikic/fast-route
تشغيل خادم Swoole
قم بتشغيل الأمر التالي في الطرفية لتشغيل خادم Swoole:
php server.php
الوصول إلى تطبيق الويب
افتح المتصفح واذهب إلى الروابط التالية:
http://localhost:9501/
: سترى الصفحة تعرضWelcome to ServBay!
.http://localhost:9501/hello/ServBay
: سترى الصفحة تعرض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 يجعلان منه اختيارًا مثاليًا لإنشاء تطبيقات ذات توازي عالي.