1. 개요

REST API를 만들때 API를 컨트롤하는 메인클래스와 실제 서비스를 하는 서비스 클래스를 분리해서 개발할 경우가 있다.

즉, 커맨드패턴을 응용하여 API에서 공통으로 사용하는 로깅이나 인증 등은 메인클래스에서 진행하고

실제 각 요청별로 서비스를 처리하는 것은 각각의 서비스 클래스가 처리하게 되는데...
그럴 경우 런타임에서 어떻게 호출하는지 알아보자!



2. 방법

 - 클라이언트 요청 API명 : apiServiceClass
라고 가정하면 아래와 같이 사용하면 된다.

include_once(/api/apiServiceClass";


$className = "apiServiceClass"


$obj = new $className();



만약, 생성자에 어떤 값을 넣어야 된다면?

include_once(/api/apiServiceClass";


$className = "apiServiceClass"


$obj = new $className("inputParameter");


가로안에 넣어주면 된다!!

'PHP' 카테고리의 다른 글

PHP에서 동시에 2개작업이 안되는 이유 및 해결법  (0) 2018.03.30

1개의 사이트에서 2개의 탭을 열고 동시에 작업수행이 안되는 경우가 있다.


상황)


1) A탭

 - 정산처리 등과 같이 오래 걸리는 작업을 실행.


2) B탭

 - 상품정보나 다른 페이지를 보려고 눌렀을 경우 먹통이 되는 경우.


위와 같은 상황이 생기는데 이것은 PHP의 세션 세이프한 처리 때문이다.


즉, session_start(); 로 시작하는 모든 페이지에서는

한 세션에서는 하나의 작업만 처리 가능하다.


In a nutshell, how session works:

Client side: php is sending back to the client, a cookie with the id of the session. So, the session ends when the server ends to process the script and not when session_write_close() is executed. So, using session_write_close() for fast saving the session in the client side is useless unless you are ob_flush() and flush() to the customer.

Server side: It could be changed but the normal behavior is to save the session information in a file.  For example:

sess_b2dbfc9ddd789d66da84bf57a62e2000  file

**This file is usually locked**, so if two sessions are trying open at the same time, then one is freezed until the file is unlocked. session_write_close() ends the lock.

For example:
<?php
$t1
=microtime(true);
session_start();
sleep(3);
session_write_close();
$t2=microtime(true);
echo 
$t2-$t1;
?>

If we run this code in two processes (using the same session, such as two tabs), then one will return 3 seconds while the other will return 6 seconds.

Its caused because the first process lock the session file.

However, changing to:
<?php
$t1
=microtime(true);
session_start();
session_write_close();
sleep(3);
$t2=microtime(true);
echo 
$t2-$t1;
?>
both files runs at 3 seconds.

For PHP 7.0 and higher, we could use session_start(true); for auto close after the first read.

This operation is highly important for AJAX when we used to do many operations in parallel by using the the same session


 - 출처 : http://php.net/manual/en/function.session-write-close.php


이것을 동시에 병렬처리 하기 위해서는 크리티컬 섹션(뮤텍스) 등을 걸지않고 풀어줘야 한다.


방법은 session_write_close(); 함수를 사용하면

뮤텍스를 해제하게 된다.


저 함수 호출이후 오래 걸리는 작업이나 원하는 작업등을 처리하는 로직을 작성하면 된다.


ex)

<?php

session_start();

session_write_close();


DoLongTimeWorks();


?>


'PHP' 카테고리의 다른 글

PHP에서 변수로 클래스 호출방법  (0) 2018.04.14

+ Recent posts