ホームページ PHPフレームワーク Swoole Swoole は、同時実行性の高い大規模ファイルのアップロード ソリューションを実装しています

Swoole は、同時実行性の高い大規模ファイルのアップロード ソリューションを実装しています

Jun 13, 2023 pm 08:20 PM
高い同時実行性 ファイルのアップロード swoole

Swoole は、PHP をベースにした高性能な非同期ネットワーク指向プログラミング フレームワークで、非同期 IO、マルチプロセス マルチスレッド、コルーチンなどの機能を実現し、ネットワーク プログラミングにおける PHP のパフォーマンスを大幅に向上させることができます。多くのリアルタイムおよび同時実行性の高いアプリケーション シナリオでは、Swoole が開発者にとっての最初の選択肢となっています。この記事では、Swoole を使用して大規模ファイルの同時アップロードを実装する方法を紹介します。

1. 従来のソリューションの問題

従来のファイル アップロード ソリューションでは、通常、HTTP POST リクエスト メソッドが使用されます。つまり、ファイル データはフォームを通じて送信され、バックエンドが受信します。次に、ファイルデータを読み取ってアップロードします。小さなファイルを処理する場合はこの方法で十分ですが、大きなファイルを処理する場合は多くの問題が発生します。

  1. プロセスに時間がかかります

ファイルがアップロードされるとき プロセス中に、アップロードする前に、ファイル全体のデータをメモリに読み取る必要があります。転送されるファイルが比較的大きい場合、読み込み時間が非常に長くなり、PHP が単一プロセスであるため、ファイルのアップロード要求が大量にある場合、サービスのプロセスがブロックされ、サーバー全体のパフォーマンスに影響を及ぼします。 。

  1. メモリ使用量

アップロードするにはファイル データ全体をメモリに読み込む必要があるため、大量のサーバー メモリが占​​有され、パフォーマンスにさらに影響します。

  1. 長い応答時間

応答が返される前にファイル データ全体を読み取ってアップロードする必要があるため、応答時間が非常に長くなり、ユーザーのパフォーマンスが低下します。経験は良いです。

2. Swoole に基づく大容量ファイル アップロード ソリューション

  1. 原理紹介

Swoole は、HTTP サーバーと TCP サーバーの 2 つの方法でネットワーク リクエストを処理できます。前者は Web アプリケーションにより適しており、後者はさまざまなカスタム ネットワーク アプリケーションおよびプロトコルに使用されます。この記事では、HTTP サーバーを使用して大きなファイルのアップロード シナリオを実装します。 Swoole には、swoole_http_request と swoole_http_response という 2 つの組み込みオブジェクトが用意されており、これらのオブジェクトを通じて HTTP リクエストと応答に関する情報を取得できます。

  1. 具体的な実装

a. クライアント リクエスト

クライアントは POST リクエストを通じてファイル データをサーバーにアップロードし、サーバーはアップロードされたデータを取得します。 swoole_http_request オブジェクトを介したデータ ファイル データ。

b. サーバー側の処理

サーバー側のファイル リクエストごとに、ファイル名、ファイル タイプ、ファイル サイズなどを含むファイル アップロード情報を swoole_http_request オブジェクトを通じて取得できます。 。その後、Swoole が提供する非同期コルーチンを介してファイルをアップロードし、ファイルをチャンクで読み取り、ターゲット サーバー (Alibaba Cloud Object Storage OSS など) に転送できます。ファイルをアップロードするときに注意する必要があるのは、ストリーミング データ送信に Swoole が提供するコルーチン メソッドを使用できるため、メモリ使用量を比較的小さくできることです。

c. サーバーの応答

ファイルのアップロードが完了した後、サーバーはクライアントにアップロードの成功とアップロードされたファイルの情報を提供する必要があります。 Swoole は http リクエストに直接応答するための swoole_http_response オブジェクトを提供しているため、それを直接使用してクライアントに応答できます。

3. コード例

以下は、Swoole に基づく大規模ファイル アップロード ソリューションの簡単なコード例です。

<?php
use SwooleHttpRequest;
use SwooleHttpResponse;

$http = new SwooleHttpServer("127.0.0.1", 9501);

$http->on("request", function(Request $request, Response $response) {
    $filename = $request->files['file']['name'];
    $filepath = '/path/to/your/file' . $filename;
    $filesize = $request->header['content-length'];
    $tempPath = $request->files['file']['tmp_name'];
    $filetype = $request->files['file']['type'];

    $response->header("Content-Type", "application/json");
    $response->header("Access-Control-Allow-Origin", "*");

    $fp = fopen($tempPath, 'r');
    $client = new SwooleCoroutineClient(SWOOLE_SOCK_TCP);
    $client->connect('your-oss-cn-addr', 'your-oss-cn-port');
    $client->send("your-key");
    $client->send("your-secret");
    $client->send($filename);
    $client->send($filesize);
    $client->send($filetype);
    while (!feof($fp)) {
        $client->send(fread($fp, 8192));
    }
    fclose($fp);
    $client->close();
    $response->end(json_encode([
        'success' => true,
        'message' => '文件上传成功'
    ]));
});

$http->start();
ログイン後にコピー

4. 注意事項

  1. PHP 拡張機能の開始

Swoole を使用するには、対応する PHP 拡張機能を開始する必要があり、次のコマンドでインストールできます。

pecl install swoole
ログイン後にコピー
  1. Swoole サーバーの構成

Swoole を使用してファイルをアップロードする場合、Swoole サーバーの関連パラメーターを構成する必要があります。たとえば、ワーカープロセスの数、ログ情報の記録レベル、ポート番号などを設定する必要があり、ニーズに応じて設定できます。上記のサンプル コードでは、構成に次のコードを使用しました。

$http = new SwooleHttpServer("127.0.0.1", 9501);
ログイン後にコピー
  1. メモリ使用量

ファイルをアップロードするとき、アップロードされたデータはキャッシュされて処理される必要があります。したがって、ファイルのアップロードを処理するときに大量のメモリが使用される可能性があります。メモリ オーバーフローの問題を回避するには、ファイルをチャンクに分けて読み取り、読み取り後に各データを送信し、送信の完了後に次のデータを読み取ることを検討できます。

5. 概要

この記事では、Swoole を使用して大きなファイルの同時アップロードを実現する方法を紹介します。従来のファイルアップロード方法と比較して、Swooleを使用するとファイルアップロードの効率が大幅に向上し、サーバーのパフォーマンスが向上します。実際のアプリケーションでは、特定のニーズに応じて、適切なアップロード スキームと Swoole パラメーター構成を選択できます。

以上がSwoole は、同時実行性の高い大規模ファイルのアップロード ソリューションを実装していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Workerman ドキュメントにファイルのアップロードとダウンロードを実装する Workerman ドキュメントにファイルのアップロードとダウンロードを実装する Nov 08, 2023 pm 06:02 PM

Workerman ドキュメントでファイルのアップロードとダウンロードを実装するには、特定のコード サンプルが必要です はじめに: Workerman は、シンプル、効率的、使いやすい高性能 PHP 非同期ネットワーク通信フレームワークです。実際の開発では、ファイルのアップロードとダウンロードが一般的な機能要件となりますが、この記事では、Workerman フレームワークを使用してファイルのアップロードとダウンロードを実装する方法と、具体的なコード例を紹介します。 1. ファイル アップロード: ファイル アップロードとは、ローカル コンピューター上のファイルをサーバーに転送する操作を指します。以下が使用されます

gRPC を使用して Golang でファイルのアップロードを実装するにはどうすればよいですか? gRPC を使用して Golang でファイルのアップロードを実装するにはどうすればよいですか? Jun 03, 2024 pm 04:54 PM

gRPC を使用してファイルのアップロードを実装するにはどうすればよいですか?リクエストおよびレスポンスメッセージを含むサポートサービス定義を作成します。クライアントでは、アップロードされるファイルが開かれてチャンクに分割され、gRPC ストリーム経由でサーバーにストリーミングされます。サーバー側では、ファイル チャンクが受信され、ファイルに保存されます。ファイルのアップロードが完了すると、サーバーはアップロードが成功したかどうかを示す応答を送信します。

Laravelでswooleコルーチンを使用する方法 Laravelでswooleコルーチンを使用する方法 Apr 09, 2024 pm 06:48 PM

Laravel で Swoole コルーチンを使用すると、大量のリクエストを同時に処理でき、次のような利点があります: 同時処理: 複数のリクエストを同時に処理できます。高いパフォーマンス: Linux の epoll イベント メカニズムに基づいて、リクエストを効率的に処理します。低リソース消費: 必要なサーバー リソースが少なくなります。統合が簡単: Laravel フレームワークとのシームレスな統合が可能で、使いやすいです。

スウールとワーカーマンはどちらが良いですか? スウールとワーカーマンはどちらが良いですか? Apr 09, 2024 pm 07:00 PM

Swoole と Workerman はどちらも高性能の PHP サーバー フレームワークです。 Swoole は、非同期処理、優れたパフォーマンス、スケーラビリティで知られており、多数の同時リクエストと高スループットを処理する必要があるプロジェクトに適しています。 Workerman は、使いやすさや同時実行量が少ないプロジェクトに適した直感的な API を備え、非同期モードと同期モードの両方の柔軟性を提供します。

swoole_process ではユーザーがどのように切り替えられるのでしょうか? swoole_process ではユーザーがどのように切り替えられるのでしょうか? Apr 09, 2024 pm 06:21 PM

Swoole プロセスではユーザーを切り替えることができます。具体的な手順は、プロセスの作成、プロセス ユーザーの設定、プロセスの開始です。

swooleフレームワークでサービスを再起動する方法 swooleフレームワークでサービスを再起動する方法 Apr 09, 2024 pm 06:15 PM

Swoole サービスを再起動するには、次の手順に従います。 サービスのステータスを確認し、PID を取得します。サービスを停止するには、「kill -15 PID」を使用します。サービスの開始に使用したのと同じコマンドを使用してサービスを再起動します。

Golang関数でファイルアップロード処理を簡素化 Golang関数でファイルアップロード処理を簡素化 May 02, 2024 pm 06:45 PM

回答: はい、Golang はファイルのアップロード処理を簡素化する機能を提供します。詳細: MultipartFile タイプは、ファイルのメタデータとコンテンツへのアクセスを提供します。 FormFile 関数は、フォーム要求から特定のファイルを取得します。 ParseForm 関数と ParseMultipartForm 関数は、フォーム データとマルチパート フォーム データを解析するために使用されます。これらの機能を使用すると、ファイル処理プロセスが簡素化され、開発者はビジネス ロジックに集中できるようになります。

Golang でドラッグ アンド ドロップ ファイル アップロードを実装するにはどうすればよいですか? Golang でドラッグ アンド ドロップ ファイル アップロードを実装するにはどうすればよいですか? Jun 05, 2024 pm 12:48 PM

Golang でドラッグ アンド ドロップ ファイルのアップロードを実装するにはどうすればよいですか?ミドルウェアを有効にし、ファイルのアップロード要求を処理します。ドラッグ アンド ドロップ領域の HTML コードを作成し、ドラッグ アンド ドロップ イベントを処理するための JavaScript コードを追加します。

See all articles