Rumah >rangka kerja php >Workerman >Perkongsian pengalaman pembangunan pekerja: membina aplikasi rangkaian berskala besar yang boleh berskala

Perkongsian pengalaman pembangunan pekerja: membina aplikasi rangkaian berskala besar yang boleh berskala

王林
王林asal
2023-08-08 14:49:051199semak imbas

Perkongsian pengalaman pembangunan pekerja: membina aplikasi rangkaian berskala besar yang boleh berskala

Perkongsian pengalaman pembangunan pekerja: Membina aplikasi rangkaian berskala besar berskala

Pengenalan:
Dengan perkembangan pesat Internet hari ini, semakin banyak aplikasi Internet perlu mengendalikan sejumlah besar sambungan serentak dan beban yang tinggi. Untuk memenuhi keperluan ini, pembangun perlu memilih rangka kerja komunikasi rangkaian yang cekap dan boleh dipercayai. Workerman ialah rangka kerja pengaturcaraan rangkaian yang telah menarik perhatian ramai sejak beberapa tahun kebelakangan ini Dengan prestasi tinggi, kebolehskalaan dan kesederhanaan penggunaannya, ia telah menjadi pilihan pertama untuk membina aplikasi rangkaian berskala besar.

1. Gambaran Keseluruhan Workerman
Workerman ialah rangka kerja pengaturcaraan rangkaian tak segerak berprestasi tinggi yang dibangunkan berdasarkan PHP. Berbanding dengan model pengaturcaraan rangkaian penyekat segerak tradisional, Workerman menggunakan model pengaturcaraan rangkaian bukan penyekat tak segerak, yang boleh mengendalikan sejumlah besar sambungan serentak dengan cekap. Dengan menggunakan pendekatan dipacu peristiwa dan berbilang proses, Workerman boleh mencapai daya pemprosesan yang tinggi, kependaman rendah dan komunikasi rangkaian serentak yang tinggi.

2. Pemasangan dan konfigurasi
Pertama, kita perlu memasang Workerman melalui Composer. Jalankan arahan berikut dalam direktori akar projek:

composer require workerman/workerman

Selepas pemasangan selesai, kita boleh memperkenalkan fail autoload ke dalam projek untuk kegunaan kelas dan fungsi Workerman yang seterusnya:

require_once __DIR__ . '/vendor/autoload.php';

Seterusnya, kita perlu melakukan beberapa konfigurasi asas, seperti menyediakan proses pekerja Kuantiti, port mendengar, dsb. Berikut ialah contoh konfigurasi mudah:

use WorkermanWorker;

// 创建一个worker实例,监听1234端口
$worker = new Worker('tcp://0.0.0.0:1234');

// 设置worker进程数量
$worker->count = 4;

// worker启动时的回调函数
$worker->onWorkerStart = function ($worker) {
    echo "Worker started
";
};

// 新客户端连接时的回调函数
$worker->onConnect = function ($connection) {
    echo "New connection
";
};

// 接收到数据时的回调函数
$worker->onMessage = function ($connection, $data) {
    echo "Received data: $data
";
};

// 启动worker
Worker::runAll();

Dengan konfigurasi di atas, kami mencipta instance pekerja mendengar port 1234 dan menyediakan 4 proses pekerja. Apabila pelanggan baharu bersambung, fungsi panggil balik onConnect akan dilaksanakan apabila data yang dihantar oleh klien diterima, fungsi panggil balik onMessage akan dilaksanakan.

3. Gunakan Workerman untuk membangunkan aplikasi rangkaian

  1. Buat pelayan
    Untuk mencipta aplikasi pelayan berdasarkan Workerman, kita hanya perlu mentakrifkan contoh pekerja dan mengkonfigurasi fungsi panggil balik yang sepadan. Berikut ialah contoh mudah:

    use WorkermanWorker;
    
    // 创建一个worker实例,监听1234端口
    $worker = new Worker('tcp://0.0.0.0:1234');
    
    // 设置worker进程数量
    $worker->count = 4;
    
    // 新客户端连接时的回调函数
    $worker->onConnect = function ($connection) {
     echo "New connection
    ";
    };
    
    // 接收到数据时的回调函数
    $worker->onMessage = function ($connection, $data) {
     echo "Received data: $data
    ";
    };
    
    // 启动worker
    Worker::runAll();
  2. Buat Pelanggan
    Untuk mencipta aplikasi pelanggan berasaskan Workerman, kita perlu mentakrifkan contoh pelanggan dan menulis logik yang sepadan. Berikut adalah contoh mudah:

    use WorkermanWorker;
    
    // 创建一个worker实例
    $worker = new Worker();
    
    // 连接服务端
    $connection = new WorkermanConnectionAsyncTcpConnection('tcp://127.0.0.1:1234');
    
    // 连接成功时的回调函数
    $connection->onConnect = function () {
     echo "Connected
    ";
     $connection->send("Hello Server");
    };
    
    // 接收到服务端数据时的回调函数
    $connection->onMessage = function ($connection, $data) {
     echo "Received data: $data
    ";
    };
    
    // 连接断开时的回调函数
    $connection->onClose = function () {
     echo "Connection closed
    ";
    };
    
    // 启动worker
    Worker::runAll();

IV Contoh aplikasi
Berikut adalah contoh aplikasi bilik sembang mudah yang boleh melaksanakan fungsi sembang masa nyata antara berbilang pelanggan:

use WorkermanWorker;

// 创建一个worker实例
$worker = new Worker('websocket://0.0.0.0:8080');

// 设置worker进程数量
$worker->count = 4;

// 客户端列表
$clients = [];

// 新客户端连接时的回调函数
$worker->onConnect = function ($connection) use (&$clients) {
    echo "New connection
";
    $clients[$connection->id] = $connection;
};

// 接收到消息时的回调函数
$worker->onMessage = function ($connection, $data) use ($clients) {
    echo "Received data: $data
";
    // 广播消息给所有客户端
    foreach ($clients as $client) {
        $client->send($data);
    }
};

// 客户端断开连接时的回调函数
$worker->onClose = function ($connection) use (&$clients) {
    echo "Connection closed
";
    // 从客户端列表中移除断开连接的客户端
    unset($clients[$connection->id]);
};

// 启动worker
Worker::runAll();

Ringkasan:
Melalui artikel ini Pengenalan , kami belajar tentang konsep asas, kaedah pemasangan dan konfigurasi serta contoh penggunaan rangka kerja Workerman. Workerman telah menjadi pilihan pertama untuk membangunkan aplikasi rangkaian berskala besar kerana prestasi tinggi, kebolehskalaan dan kemudahan penggunaannya. Saya harap artikel ini boleh membantu semua orang apabila menggunakan Workerman untuk pembangunan web.

Atas ialah kandungan terperinci Perkongsian pengalaman pembangunan pekerja: membina aplikasi rangkaian berskala besar yang boleh berskala. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn