مثال بسيط للتطوير

التثبيت

تثبيت 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

ملاحظة:

  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");

// تشغيل 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);
};

ملاحظة:

  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");

// تشغيل 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

ملاحظة:

  1. إذا حدثت مشكلة في الوصول، يرجى الرجوع إلى قسم المشاكل الشائعة في الدليل - فشل الاتصال للتدقيق.

  2. الخادم يستخدم بروتوكول TCP الخام، ولا يمكن استخدام بروتوكولات websocket أو http للتواصل مباشرة.