Pelayan di Versi 3 AWS SDK for PHP - AWS SDK for PHP

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pelayan di Versi 3 AWS SDK for PHP

Pelayan membantu membuatnya lebih mudah untuk bekerja dengan sistem yang pada akhirnya konsisten dengan menyediakan cara abstrak untuk menunggu sampai sumber daya masuk ke keadaan tertentu dengan melakukan polling sumber daya. Anda dapat menemukan daftar pelayan yang didukung oleh klien dengan melihat APIdokumentasi untuk satu versi klien layanan. Untuk menavigasi ke sana, buka halaman klien dalam API dokumentasi dan arahkan ke nomor versi tertentu (diwakili oleh tanggal) dan gulir ke bawah ke bagian 'Pelayan'. Tautan ini akan membawa Anda ke bagian pelayan S3.

Dalam contoh berikut, klien Amazon S3 digunakan untuk membuat bucket. Kemudian pelayan digunakan untuk menunggu sampai ember ada.

// Create a bucket $s3Client->createBucket(['Bucket' => 'amzn-s3-demo-bucket']); // Wait until the created bucket is available $s3Client->waitUntil('BucketExists', ['Bucket' => 'amzn-s3-demo-bucket']);

Jika pelayan harus melakukan polling terlalu sering, itu akan memberikan \RuntimeException pengecualian.

Konfigurasi pelayan

Pelayan didorong oleh serangkaian opsi konfigurasi asosiatif. Semua opsi yang digunakan oleh pelayan tertentu memiliki nilai default, tetapi mereka dapat diganti untuk mendukung strategi menunggu yang berbeda.

Anda dapat memodifikasi opsi konfigurasi pelayan dengan meneruskan array @waiter opsi asosiatif ke $args argumen klien waitUntil() dan getWaiter() metode.

// Providing custom waiter configuration options to a waiter $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'amzn-s3-demo-bucket', '@waiter' => [ 'delay' => 3, 'maxAttempts' => 10 ] ]);
keterlambatan (int)

Jumlah detik untuk menunda antara upaya pemungutan suara. Setiap pelayan memiliki nilai delay konfigurasi default, tetapi Anda mungkin perlu mengubah pengaturan ini untuk kasus penggunaan tertentu.

maxAttempts (int)

Jumlah maksimum upaya pemungutan suara untuk diterbitkan sebelum gagal pelayan. Opsi ini memastikan bahwa Anda tidak menunggu sumber daya tanpa batas waktu. Setiap pelayan memiliki nilai maxAttempts konfigurasi default, tetapi Anda mungkin perlu mengubah pengaturan ini untuk kasus penggunaan tertentu.

initDelay (int)

Jumlah waktu dalam hitungan detik untuk menunggu sebelum upaya pemungutan suara pertama. Ini mungkin berguna ketika menunggu sumber daya yang Anda tahu akan memakan waktu beberapa saat untuk masuk ke keadaan yang diinginkan.

sebelum (dapat dipanggil)

Fungsi PHP callable yang dipanggil sebelum setiap upaya. Callable dipanggil dengan Aws\CommandInterface perintah yang akan dieksekusi dan jumlah upaya yang telah dieksekusi sejauh ini. Penggunaan before callable mungkin untuk memodifikasi perintah sebelum dijalankan atau memberikan informasi kemajuan.

use Aws\CommandInterface; $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'amzn-s3-demo-bucket', '@waiter' => [ 'before' => function (CommandInterface $command, $attempts) { printf( "About to send %s. Attempt %d\n", $command->getName(), $attempts ); } ] ]);

Menunggu secara asinkron

Selain menunggu secara serempak, Anda dapat meminta pelayan untuk menunggu secara asinkron saat mengirim permintaan lain atau menunggu beberapa sumber daya sekaligus.

Anda dapat mengakses janji pelayan dengan mengambil pelayan dari klien menggunakan metode klien. getWaiter($name, array $args = []) Gunakan promise() metode pelayan untuk memulai pelayan. Janji pelayan dipenuhi dengan Aws\CommandInterface yang terakhir yang dieksekusi di pelayan, dan ditolak dengan kesalahanRuntimeException.

use Aws\CommandInterface; $waiterName = 'BucketExists'; $waiterOptions = ['Bucket' => 'amzn-s3-demo-bucket']; // Create a waiter promise $waiter = $s3Client->getWaiter($waiterName, $waiterOptions); // Initiate the waiter and retrieve a promise $promise = $waiter->promise(); // Call methods when the promise is resolved. $promise ->then(function () { echo "Waiter completed\n"; }) ->otherwise(function (\Exception $e) { echo "Waiter failed: " . $e . "\n"; }); // Block until the waiter completes or fails. Note that this might throw // a \RuntimeException if the waiter fails. $promise->wait();

Mengekspos pelayan berbasis janji API memungkinkan untuk beberapa kasus penggunaan overhead yang kuat dan relatif rendah. Misalnya, bagaimana jika Anda ingin menunggu banyak sumber daya, dan melakukan sesuatu dengan pelayan pertama yang berhasil diselesaikan?

use Aws\CommandInterface; // Create an array of waiter promises $promises = [ $s3Client->getWaiter('BucketExists', ['Bucket' => 'a'])->promise(), $s3Client->getWaiter('BucketExists', ['Bucket' => 'b'])->promise(), $s3Client->getWaiter('BucketExists', ['Bucket' => 'c'])->promise() ]; // Initiate a race between the waiters, fulfilling the promise with the // first waiter to complete (or the first bucket to become available) $any = Promise\any($promises) ->then(function (CommandInterface $command) { // This is invoked with the command that succeeded in polling the // resource. Here we can know which bucket won the race. echo "The {$command['Bucket']} waiter completed first!\n"; }); // Force the promise to complete $any->wait();