Workerman 개발: HTTP 프로토콜 기반 배치 파일 처리 시스템을 구현하는 방법, 구체적인 코드 예제가 필요함
인터넷과 디지털 기술의 발전으로 특히 기업에서 데이터 처리가 점점 더 중요해졌습니다. . 때로는 사진, 비디오, 오디오 등과 같은 많은 수의 파일을 처리해야 할 때가 있습니다. 현재 수동 작업은 시간이 많이 걸리고 노동 집약적일 뿐만 아니라 오류가 발생하기 쉽습니다. 배치 파일 처리 시스템을 구현하는 방법은 이 기사에서 논의할 주제입니다.
Workerman은 PHP로 개발된 고성능 소켓 프레임워크로, 사용하기 쉽고, 이벤트 중심 프로그래밍 모델을 제공하는 것이 특징입니다. 이 기사에서는 Workerman을 사용하여 HTTP 프로토콜 기반 배치 파일 처리 시스템을 개발하는 방법에 중점을 둘 것입니다. 이 시스템을 통해 파일 일괄 업로드, 압축, 트랜스코딩과 같은 기능을 구현할 수 있습니다.
1. 개발 환경 설정
먼저 PHP, Composer, Workerman을 설치해야 합니다. Composer 설치 방법을 소개합니다. 명령줄 도구를 열고 다음 명령을 입력하세요:
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php 작곡가-setup.php
$ php -r "unlink('composer-setup.php');"
설치가 완료된 후 Workerman을 설치하려면 프로젝트 디렉터리에서 다음 명령을 실행해야 합니다.
$ Composer require Workerman/workerman
2. 프로젝트 생성 및 디렉토리 구조
배치 파일 처리 시스템 프로젝트를 생성합니다. 프로젝트 이름은 배치 파일이며 디렉토리 구조는 다음과 같습니다.
├─applications #Application 디렉토리
│ ├─app #Application 디렉토리
│ │ └─Http #Http 애플리케이션 디렉토리
│ │ ├─Config #Configuration 디렉토리
│ │ ├─Controller #Controller 디렉토리
│ │ ├─Events #Event 디렉토리
│ │ ├─Libraries #Library 디렉토리
│ │ ├─Models #모델 디렉터리
│ │ ├ ─작업 #작업 디렉터리
│ │ └─Views # 디렉터리 보기
│ └─config #전역 구성 파일
├─public #웹 루트 디렉터리
│ ├─css #CSS 파일 디렉터리
│ ├ ─js #JS 파일 디렉터리
│ └─index.php #웹사이트 항목 파일
├─start.php #시스템 시작 파일
└─composer.json #종속성 관리 파일
디렉터리 구조에 애플리케이션 디렉터리를 생성했는데, 구성, 컨트롤러, 이벤트, 라이브러리, 모델 및 기타 디렉토리가 포함되어 있습니다. 이 디렉터리는 애플리케이션의 구성 요소를 관리하는 데 사용됩니다. 예를 들어 Controller 디렉터리는 컨트롤러 클래스를 관리하는 데 사용되고 Models 디렉터리는 데이터 모델 클래스 등을 관리하는 데 사용됩니다.
저희 웹사이트 입구 파일인 index.php 파일을 public 디렉토리에 생성합니다. 다음 단계에서 이 파일을 설정하겠습니다.
3. 시작 스크립트 작성
Workerman 프레임워크는 소켓 모드를 사용하며 브라우저를 통해 액세스할 수 없습니다. 따라서 시작 파일을 별도의 PHP 파일로 저장해야 합니다. start.php 파일을 열고 다음 코드를 입력하세요:
use WorkermanWorker;
require_once DIR '/vendor/autoload.php';
$http_worker = new Worker("http:// 0.0.0.0:9000");
$http_worker->count = 4;
$http_worker->onWorkerStart = function($worker) {
require_once __DIR__ . '/applications/app/Http/routes.php';
};
Worker::runAll();
위 코드에서는 $http_worker라는 Worker 인스턴스를 생성하고 onWorkerStart 이벤트를 통해 라우팅 파일 Routes.php를 로드했습니다.
4. 경로 작성
/applications/app/Http/routes.php 파일을 열고 다음 코드를 입력하세요:
use WorkermanProtocolsHttp;
$http->onMessage = function($connection , $ data) {
$request_data = Http::requestData($data); $request_path = $request_data['path']; if (($pos = strpos($request_path, '?')) !== false) { $request_path = substr($request_path, 0, $pos); } $controller_action = str_replace('/', '\', $request_path); $controller_action = ucfirst(strtolower($controller_action)); $controller_action = str_replace('-', '', $controller_action); $controller_action = trim($controller_action, '\'); $controller_action = 'App\Http\Controllers\' . $controller_action . 'Controller'; if (!class_exists($controller_action)) { Http::header("HTTP/1.1 404 Not Found
");
Http::end("404 Not Found"); return; } $controller = new $controller_action(); $method = isset($request_data['query']['method']) ? $request_data['query']['method'] : 'index'; if (!method_exists($controller, $method)) { Http::header("HTTP/1.1 404 Not Found
");
Http::end("404 Not Found"); return; } $controller->$method();
};
위 코드에서는 Http 프로토콜을 통해 요청 데이터를 파싱하고, 요청 경로에 따라 해당 컨트롤러를 로드하고, 컨트롤러 메서드에 액세스합니다.
5. 컨트롤러 작성
/applications/app/Http/Controllers/BatchfileController.php 파일을 열고 다음 코드를 입력하세요:
namespace AppHttpControllers;
use WorkermanProtocolsHttp;
use WorkermanProtocolsHttpResponse; WorkermanProtocolsHttpRequest ;
{
public function index() { return new Response('Hello world'.PHP_EOL); } public function uploadFiles(Request $request) { $files = $request->file(); if(empty($files)){ return new Response(json_encode([ 'message' => 'No files were uploaded.', ])); } //处理你需要处理的逻辑 return new Response(json_encode([ 'message' => 'Files uploaded successfully.', ])); }
/applications/app/Http/Controllers/BatchfileController.php 파일을 열고 uploadFiles 메소드에 다음 코드를 입력하세요.
{
$files = $request->file(); if(empty($files)){ return new Response(json_encode([ 'message' => 'No files were uploaded.', ])); } $result = []; foreach ($files as $name => $file) { $path = 'uploads/' . $file['name']; if(move_uploaded_file($file['tmp_name'], $path)){ $result[] = [ 'name' => $file['name'], 'type' => $file['type'], 'size' => $file['size'], 'path' => $path, ]; } } //处理你需要处理的逻辑 return new Response(json_encode([ 'message' => 'Files uploaded successfully.', 'files' => $result, ]));
7. 테스트 실행
명령줄 모드에서 프로젝트 디렉터리에 들어가서 php start.php 명령을 실행하여 Workerman 서비스를 시작합니다. 모든 것이 정상이라면 브라우저 주소 표시줄에 http://localhost:9000을 입력하면 "Hello world"가 출력되는 것을 볼 수 있습니다. 실행 결과는 다음과 같습니다.
파일 업로드 기능을 테스트하려면 Postman 또는 컬 명령을 사용하여 시뮬레이션 테스트를 수행할 수 있습니다. 요청 샘플 코드는 다음과 같습니다.
curl -X POST
http://localhost:9000/file/upload
-H 'cache-control: no-cache'
-H 'content-type: multipart/form- data; 경계 =------WebKitFormBoundary7MA4YWxkTrZu0gW'
-F 'file1=@/path/to/file1.png'
-F 'file2=@/path/to/file2.jpg'
이 시점에서 우리는 Workerman을 사용하여 HTTP 프로토콜 기반의 배치 파일 처리 시스템을 개발하고 파일 업로드 기능을 구현하는 데 성공했습니다. 우리는 이를 기반으로 파일 압축, 트랜스코딩 및 기타 기능을 달성하기 위해 더욱 확장할 수 있습니다. Workerman 프레임워크의 이벤트 중심 프로그래밍 모델을 사용하면 애플리케이션의 기능을 쉽게 확장할 수 있습니다.
위 내용은 Workerman 개발: HTTP 프로토콜 기반 배치 파일 처리 시스템을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!