العملية الأساسية
(كمثال على خادم دردشة ويب بسيطة باستخدام WebSocket)
1. انشاء دليل مشروع في أي مكان
مثل SimpleChat/
ادخل إلى الدليل ونفذ composer require workerman/workerman
2. استيراد vendor/autoload.php (تُولد بعد تثبيت composer)
قم بإنشاء start.php ، واستورد vendor/autoload.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
3. اختيار البروتوكول
هنا نختار بروتوكول النص (بروتوكول مخصص في Workerman، الشكل هو نص + سطر جديد)
(حاليًا يدعم Workerman HTTP وWebSocket وText نصي، إذا كنت تحتاج لاستخدام بروتوكولات أخرى، يرجى الرجوع إلى فصل البروتوكولات لتطوير بروتوكولك الخاص)
4. كتابة نص الدخول حسب الحاجة
على سبيل المثال، الملف التالي هو ملف دخول دردشة بسيطة.
SimpleChat/start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$global_uid = 0;
// عند اتصال العميل، يتم تخصيص uid وحفظ الاتصال وإعلام جميع العملاء
function handle_connection($connection)
{
global $text_worker, $global_uid;
// تخصيص uid لهذا الاتصال
$connection->uid = ++$global_uid;
}
// عند إرسال العميل لرسالة، يتم توجيهها للجميع
function handle_message(TcpConnection $connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}
// عند قطع اتصال العميل، يتم بث ذلك لجميع العملاء
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] logout");
}
}
// إنشاء Worker بروتوكول النص للاستماع على واجهة 2347
$text_worker = new Worker("text://0.0.0.0:2347");
// تشغيل عملية واحدة فقط، مما يسهل نقل البيانات بين العملاء
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Worker::runAll();
5. الاختبار
يمكن اختبار بروتوكول النص باستخدام أمر telnet
telnet 127.0.0.1 2347