Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana Swooole menyokong operasi SNMP tak segerak

Bagaimana Swooole menyokong operasi SNMP tak segerak

王林
王林asal
2023-06-25 10:06:23717semak imbas

SNMP (Simple Network Management Protocol) ialah protokol yang digunakan untuk mengurus dan memantau peranti rangkaian. Dalam sistem perisian moden, SNMP digunakan secara meluas dalam senario seperti pemantauan status peranti rangkaian, statistik prestasi dan penyelesaian masalah. Dalam pembangunan PHP, Swoole, sebagai rangka kerja rangkaian tak segerak berprestasi tinggi, juga menyediakan sokongan untuk operasi tak segerak SNMP.

Artikel ini akan memperkenalkan cara menggunakan Swoole untuk melaksanakan operasi SNMP tak segerak, termasuk pengetahuan asas SNMP, cara menggunakan klien SNMP tak segerak dalam Swoole dan beberapa senario aplikasi praktikal.

Asas SNMP

Protokol SNMP terdiri daripada beberapa arahan dan beberapa objek. Arahan dibahagikan terutamanya kepada GET, SET, GET-NEXT dan TRAP, dsb., dan objek adalah beberapa data atau maklumat status dalam peranti rangkaian. Antaranya, arahan GET digunakan untuk mendapatkan nilai satu atau lebih objek; arahan digunakan untuk mengurus peranti Sistem menghantar penggera atau pemberitahuan.

Untuk pelanggan SNMP, tugas utamanya ialah menghantar arahan kepada ejen SNMP dan menerima keputusan yang dikembalikan oleh ejen. Dalam komunikasi rangkaian segerak tradisional, klien SNMP biasanya menghantar arahan kepada ejen SNMP melalui beberapa perpustakaan kelas atau API, dan menunggu ejen mengembalikan keputusan sebelum meneruskan ke langkah seterusnya. Kaedah penyegerakan ini mempunyai beberapa kelemahan Contohnya, menyekat dan menunggu akan mengurangkan prestasi program, dan ia tidak sesuai untuk senario aplikasi konkurensi tinggi.

Pelanggan SNMP tak segerak Swoole

Swoole, sebagai rangka kerja rangkaian tak segerak, menyediakan sokongan untuk operasi tak segerak SNMP. Dalam Swoole, kita boleh mencipta klien SNMP melalui kelas swoole_snmp, menghantar arahan dan menerima keputusan secara tidak segerak. Kelas swoole_snmp mentakrifkan kaedah berikut:

  1. swoole_snmp::__construct($host, $community, $timeout = 1, $retries = 5)

Kaedah pembinaan untuk mencipta klien SNMP. Antaranya, $host mewakili alamat IP atau nama hos ejen SNMP $community mewakili nama komuniti SNMP $timeout mewakili masa tamat (unit: saat), lalainya ialah 1 saat; lalai ialah 5 kali.

  1. swoole_snmp::set($oid, $value, $type = SNMP::TYPE_NULL)

Tetapkan nilai objek, dengan $oid mewakili ID objek; jenis mewakili jenis nilai.

  1. swoole_snmp::get($oids, $callback)

Hantar arahan GET untuk mendapatkan nilai satu atau lebih objek. Antaranya, $oids mewakili satu atau lebih ID objek, yang boleh menjadi tatasusunan atau rentetan yang dipisahkan koma mewakili fungsi panggil balik, yang akan dipanggil apabila keputusan diperoleh;

  1. swoole_snmp::getAsync($oids, $callback)

Menghantar arahan GET tak segerak, serupa dengan kaedah get, kecuali cara untuk mendapatkan keputusan adalah tak segerak.

  1. swoole_snmp::walk($oid, $callback, $max_oids = 10, $non_repeaters = 0, $max_repetitions = 10)

Menghantar arahan GET-NEXT untuk melintasi berbilang objek dalam pokok objek. Antaranya, $oid mewakili ID objek permulaan mewakili fungsi panggil balik, yang akan dipanggil apabila keputusan diperolehi $max_oids mewakili bilangan maksimum objek yang diperolehi setiap kali, lalai ialah 10; Parameter Get-Next -repeaters, lalai ialah 0; $max_repetitions mewakili parameter max-repetitions dalam Get-Next, lalai ialah 10. . mendapatkan keputusan adalah tidak segerak.

  1. swoole_snmp::setTimeout($timeout)

Tetapkan tamat masa (unit: saat).

  1. swoole_snmp::setRetries($retries)

Tetapkan bilangan percubaan semula.

    Aplikasi Contoh
  1. Di bawah, kami menggunakan contoh mudah untuk menunjukkan cara menggunakan klien SNMP tak segerak Swoole. Katakan kita perlu mendapatkan beberapa penggunaan CPU dan memori daripada ejen SNMP dan menulis hasilnya pada fail log.

Mula-mula, tambahkan kebergantungan swoole/snmp dalam fail composer.json:

{
    "require": {
        "swoole/swoole": "~2.1.3",
        "swoole/snmp": "~1.2"
    }
}

Tulis skrip untuk mendapatkan penggunaan CPU dan memori secara tidak segerak:
  1. <?php
    
    require_once __DIR__ . '/vendor/autoload.php';
    
    use SwooleCoroutine as co;
    use SwooleCoroutineSystem;
    use SwooleCoroutineClient;
    use SwooleCoroutineScheduler;
    
    co::set(['hook_flags' => SWOOLE_HOOK_ALL]);
    
    $logFile = __DIR__ . '/snmp.log';
    
    $scheduler = new Scheduler();
    $scheduler->add(function () use ($logFile) {
        $snmp = new swoole_snmp('127.0.0.1', 'public');
    
        $cpuOid = '1.3.6.1.2.1.25.3.3.1.2.196608';
        $memOid = '1.3.6.1.4.1.2021.4.6.0';
    
        $snmp->getAsync([$cpuOid, $memOid], function ($result) use ($logFile) {
            if (is_array($result) && count($result) == 2) {
                $cpuUsage = $result[$cpuOid];
                $memUsage = round($result[$memOid] / 1024, 2); // KB to MB
    
                $logMsg = date('Y-m-d H:i:s') . " CPU usage: {$cpuUsage}%, Memory usage: {$memUsage}MB" . PHP_EOL;
                System::writeFile($logFile, $logMsg, FILE_APPEND);
            } else {
                echo "Failed to get CPU and memory usage." . PHP_EOL;
            }
        });
    });
    
    $scheduler->start();
  2. Dalam contoh Swrreee
dalam contoh Swoleo di atas. dan menambah tugas coroutine dalam penjadual. Dalam tugasan ini, kami mencipta klien SNMP, menggunakan kaedah getAsync untuk mendapatkan penggunaan CPU dan memori secara tak segerak, dan menulis hasilnya pada fail log. Apabila keputusan diperoleh secara tidak segerak, fungsi panggil balik akan dipanggil untuk diproses.
  1. Perlu diingat bahawa dalam skrip di atas kita menggunakan API coroutine Swoole, jadi kita perlu mendayakan sokongan coroutine. Kami menetapkan parameter hook_flags kepada SWOOLE_HOOK_ALL dengan memanggil kaedah co::set, yang bermaksud sokongan coroutine untuk fungsi PHP didayakan.

Jalankan skrip dan lihat hasil fail log:

$ php snmp.php
$ tail -f snmp.log # 或者用其他文本编辑器打开

Ringkasan

    Artikel ini memperkenalkan cara menggunakan Swoole untuk melaksanakan operasi SNMP tak segerak dan menyediakan aplikasi sampel. Berbanding dengan kaedah komunikasi rangkaian segerak tradisional, menggunakan klien SNMP asynchronous Swoole boleh meningkatkan prestasi dan kelajuan tindak balas program dengan banyak, dan juga lebih sesuai untuk senario aplikasi rangkaian konkurensi tinggi. Dalam aplikasi praktikal, kami boleh memilih arahan dan parameter SNMP yang berbeza mengikut keperluan senario perniagaan untuk memenuhi keperluan pemantauan dan pengurusan kami untuk status peranti rangkaian.

Atas ialah kandungan terperinci Bagaimana Swooole menyokong operasi SNMP tak segerak. 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