Rumah > Artikel > rangka kerja php > Bagaimana Swooole menyokong operasi SNMP tak segerak
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:
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.
Tetapkan nilai objek, dengan $oid mewakili ID objek; jenis mewakili jenis nilai.
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;
Menghantar arahan GET tak segerak, serupa dengan kaedah get, kecuali cara untuk mendapatkan keputusan adalah tak segerak.
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.
Tetapkan tamat masa (unit: saat).
Tetapkan bilangan percubaan semula.
{ "require": { "swoole/swoole": "~2.1.3", "swoole/snmp": "~1.2" } }Tulis skrip untuk mendapatkan penggunaan CPU dan memori secara tidak segerak:
<?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();
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!