Rumah > rangka kerja php > Swoole > teks badan

Bagaimana untuk mencapai muat naik fail serentak yang tinggi dalam Swoole

王林
Lepaskan: 2023-06-25 18:21:15
asal
921 orang telah melayarinya

Dengan perkembangan pesat Internet, pelbagai jenis laman web dan aplikasi terus muncul, dan antara laman web dan aplikasi ini, muat naik fail adalah fungsi yang sangat penting. Dalam kes konkurensi yang tinggi, muat naik fail selalunya menjadi kesesakan pelayan.

Swoole ialah rangka kerja komunikasi rangkaian PHP dengan ciri kecekapan tinggi, kestabilan, ketaksegerakan dan selari Ia digunakan secara meluas dalam pelayan rangkaian berkonkurensi tinggi dan berprestasi tinggi. Artikel ini akan memperkenalkan cara untuk mencapai muat naik fail serentak yang tinggi dalam Swoole.

1. Kaedah muat naik fail tradisional

Kaedah muat naik fail tradisional dilaksanakan melalui protokol HTTP. Apabila klien memuat naik fail, penyemak imbas menghantar permintaan HTTP yang mengandungi fail ke pelayan Selepas pelayan menerima permintaan, ia memproses fail dan menyimpannya ke lokasi yang ditentukan.

Terdapat beberapa masalah dengan kaedah ini:

  1. Kelajuan muat naik fail adalah perlahan, kerana protokol HTTP adalah berdasarkan protokol TCP, dan operasi seperti berjabat tangan, membongkar dan semakan ralat mesti dilakukan sebelum setiap muat naik operasi akan menjejaskan kelajuan Muat naik.
  2. Di bawah keselarasan tinggi, pelayan terdedah kepada kesesakan, kerana setiap permintaan HTTP memerlukan sumber pelayan, dan memuat naik fail besar pada masa yang sama menggunakan banyak memori.
  3. Tiada penyulitan dan mekanisme pengesahan semasa pemindahan fail, jadi keselamatan agak rendah.

2. Gunakan Swoole untuk mencapai muat naik fail serentak tinggi

  1. Gunakan pelayan HTTP Swoole

Swoole menyediakan pelayan HTTP berprestasi tinggi, yang boleh kami gunakan untuk menggantikan pelayan HTTP tradisional. Apabila menggunakan pelayan HTTP Swoole, kami boleh memisahkan muat naik dan pemprosesan, yang boleh meningkatkan keselarasan muat naik fail dan menyimpan data fail dalam ingatan, menjimatkan masa dalam membaca dan menulis fail.

Berikut ialah kod pelayan HTTP Swoole asas:

$server = new swoole_http_server("0.0.0.0", 9501);

$server->on('request', function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World
");
});

$server->start();
Salin selepas log masuk
  1. Menggunakan muat naik tak segerak Swoole

Kaedah muat naik tak segerak Swoole boleh meningkatkan kelajuan muat naik fail dengan ketara. Kaedah muat naik fail tradisional menggunakan IO segerak Setiap kali anda memuat naik, anda perlu menunggu untuk membaca atau menulis fail selesai sebelum meneruskan muat naik Asynchronous memindahkan tugas membaca atau menulis fail ke perlaksanaan tugas tak segerak Swoole fail sedang dibaca atau ditulis, meningkatkan kelajuan muat naik.

Berikut ialah kod muat naik tak segerak Swoole:

$server->on('request', function ($request, $response) use ($server) {
    if ($request->server['request_uri'] == '/upload') {
        $fileName = $request->files['file']['name'];

        $tmpName = $request->files['file']['tmp_name'];

        $fileData = [
            'mode' => 'a',
            'data' => '',
            'offset' => 0,
            'file' => null,
            'fd' => null,
        ];

        $fileData['fd'] = fopen($fileName, $fileData['mode']);
        $fileData['file'] = swoole_async_read($tmpName, function($filename, $content) use ($fileData, $request, $response) {
            $fileData['data'] .= $content;
            $fileData['offset'] += strlen($content);
            if ($fileData['offset'] == $request->header['content-length']) {
                fwrite($fileData['fd'], $fileData['data']);
                fclose($fileData['fd']);
                $response->end('Upload success');
            }
        });
    }
});
Salin selepas log masuk
  1. Menggunakan muat naik coroutine Swoole

Muat naik coroutine Swoole boleh menjadikan muat naik fail lebih mudah. Apabila menggunakan muat naik coroutine, kami boleh menggunakan mekanisme coroutine yang disediakan oleh Swoole untuk tidak segerakkan tugas membaca dan menulis fail, dengan itu meningkatkan kelajuan muat naik fail.

Berikut ialah kod muat naik coroutine Swoole:

$server->on('request', function ($request, $response) use ($server) {
    if ($request->server['request_uri'] == '/upload') {
        $fileName = $request->files['file']['name'];
        $tmpName = $request->files['file']['tmp_name'];
 
        $content = file_get_contents($tmpName);
        go(function() use ($fileName, $content, $response) {
            file_put_contents($fileName, $content);
            $response->end('Upload success');
        });
    }
});
Salin selepas log masuk

Ringkasan:

Dalam kes konkurensi yang tinggi, muat naik fail sering menjadi kesesakan pelayan Dalam kaedah muat naik fail tradisional, kelajuan muat naik adalah lebih perlahan dan keselamatannya lebih rendah. Jika ia rendah, pelayan terdedah kepada kesesakan dan masalah lain. Menggunakan Swoole, anda boleh menggunakan muat naik tak segerak dan muat naik coroutine, yang boleh meningkatkan kelajuan muat naik fail dengan banyak, dan juga meningkatkan prestasi serentak dan keselamatan pelayan.

Atas ialah kandungan terperinci Bagaimana untuk mencapai muat naik fail serentak yang tinggi dalam Swoole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan