Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan Workerman untuk melaksanakan sistem pengkomputeran teragih

Cara menggunakan Workerman untuk melaksanakan sistem pengkomputeran teragih

WBOY
WBOYasal
2023-11-08 14:19:511526semak imbas

Cara menggunakan Workerman untuk melaksanakan sistem pengkomputeran teragih

Sistem pengkomputeran teragih merujuk kepada model pengkomputeran yang menganggap sekumpulan komputer sebagai satu sistem untuk menyelesaikan tugas pengkomputeran secara kolaboratif. Dalam praktiknya, sistem pengkomputeran teragih boleh meningkatkan kelajuan pengkomputeran dengan menambah bilangan komputer, dan pada masa yang sama dapat menyelesaikan masalah memproses sejumlah besar data. Workerman ialah rangka kerja yang boleh melaksanakan sistem pengkomputeran teragih menggunakan bahasa PHP Artikel ini akan memperkenalkan cara menggunakan Workerman untuk melaksanakan sistem pengkomputeran teragih yang mudah dan menyediakan contoh kod.

  1. Pasang Pekerja

Pertama sekali, kita perlu memasang Workerman. Ia boleh dipasang melalui Komposer. menjalankan program pelayan, klien boleh menyerahkan tugas pengkomputeran kepada pelayan Pelayan bertanggungjawab untuk memberikan tugasan kepada nod pengkomputeran untuk pengiraan dan mengembalikan keputusan akhir kepada klien. Berikut ialah contoh kod pelayan.php:

composer require workerman/workerman
    Dalam kod di atas, kami menggunakan port mendengar pelayan untuk menunggu klien menyerahkan tugas. Apabila pelayan menerima tugas yang diserahkan oleh klien, pelayan akan memberikan tugasan kepada nod pengkomputeran untuk pengiraan dan mengembalikan hasilnya kepada klien.
  1. Dalam contoh kelas Pekerja, kami mengkonfigurasi 4 proses untuk mengendalikan permintaan pelanggan. Dalam panggilan balik acara onMessage, kami mula-mula mendapatkan worker_num dan task_data daripada data JSON yang diserahkan oleh klien, kemudian buat contoh Tugasan baharu, hantar tugasan ke nod pengkomputeran dan tunggu hasil pengiraan dikembalikan.

Dalam kelas Tugas, kami menyimpan ID tugas (id_tugas), nombor nod yang akan dikira (nombor_pekerja) dan data yang akan dikira (data_tugas). Kaedah send() digunakan untuk menghantar tugasan ke nod pengkomputeran yang ditentukan. Di sini, kami menggunakan fungsi stream_socket_client() untuk melaksanakan klien soket TCP untuk berkomunikasi dengan nod pengkomputeran yang ditentukan.

Buat program nod pengkomputeran

Seterusnya, mari buat program nod pengkomputeran bernama worker.php. Program ini akan melakukan pengiraan selepas pelayan memberikan tugas pengiraan kepadanya, dan mengembalikan hasilnya kepada pelayan. Berikut ialah contoh kod pekerja.php:

<?php
use WorkermanWorker;

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

$worker = new Worker('text://0.0.0.0:2346');

$worker->count = 4;

$worker->onMessage = function($connection, $data){
    $params = json_decode($data, true);

    $worker_num = $params['worker_num'];
    $task_data = $params['task_data'];

    $task_id = md5($task_data);

    $task_worker = new Task($task_id);
    $task_worker->send([
        'worker_num' => $worker_num,
        'task_data' => $task_data
    ]);
  
    $connection->send(json_encode([
        'task_id' => $task_id
    ]));
};

class Task{
    protected $task_id;
  
    protected $worker_num;

    protected $task_data;

    public function __construct($task_id){
        $this->task_id = $task_id;
    }

    public function send($data){
        $task_data = json_encode([
            'task_id' => $this->task_id,
            'data' => $data
        ]);

        $worker_num = $data['worker_num'];
        $socket_name = "tcp://127.0.0.1:".(2347 + $worker_num);

        $client = stream_socket_client($socket_name, $errno, $errstr);
  
        fwrite($client, $task_data);
        fclose($client);
    }
}

Worker::runAll();
    Dalam kod di atas, kami menggunakan soket TCP untuk mendengar port dan menunggu pelayan menetapkan tugasan pengkomputeran. Apabila terdapat tugas pengkomputeran yang perlu diproses, kami memperoleh data yang perlu diproses daripada data tugas, melakukan pengiraan, dan menghantar hasilnya ke pelayan.
Buat program klien

Akhir sekali, kita perlu mencipta program klien bernama client.php untuk menghantar tugas pengiraan ke pelayan dan mendapatkan pengiraan keputusan. Berikut ialah contoh kod klien.php:

<?php
use WorkermanWorker;

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

$worker_num = intval($argv[1]);

$worker = new Worker("tcp://0.0.0.0:". (2347 + $worker_num));

$worker->onMessage = function($connection, $data){
    $params = json_decode($data, true);
    $task_id = $params['task_id'];

    $task_data = $params['data'];

    $result = strlen($task_data);

    $connection->send(json_encode([
        'task_id' => $task_id,
        'result' => $result
    ]));
};

Worker::runAll();
    Dalam kod di atas, kami mula-mula mencipta klien soket TCP untuk menyambung ke nod pengiraan. Fungsi fread() digunakan di sini untuk mendapatkan hasil pengembalian tugas pengiraan daripada pelayan. Kemudian kami menghantar task_id sebagai parameter kepada semua nod pengkomputeran dan menunggu keputusan dikembalikan. Berdasarkan ID tugas (task_id), kami boleh mengenal pasti nod pengkomputeran yang mengembalikan hasil pengiraan. Akhirnya kita boleh mengeluarkan hasil pengiraan.
  1. Ringkasan

Di atas ialah langkah terperinci tentang cara menggunakan Workerman untuk melaksanakan sistem pengkomputeran teragih, termasuk mencipta program pelayan, program nod pengkomputeran dan program klien, dan menyediakan khusus Contoh kod. Perlu dinyatakan bahawa contoh yang diberikan dalam artikel ini hanya menunjukkan idea asas tentang cara menggunakan Workerman untuk melaksanakan sistem pengkomputeran teragih Masih terdapat beberapa masalah dalam aplikasi praktikal, seperti pengimbangan beban, strategi pengagihan tugas, dsb. Tetapi semua masalah ini boleh diselesaikan dengan mengkaji dengan teliti rangka kerja Workerman dan melaraskan kod.

Atas ialah kandungan terperinci Cara menggunakan Workerman untuk melaksanakan sistem pengkomputeran teragih. 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