Как оформить заказ на HTTP-запрос POST?

0

Ги!

Случай: Я написал API (в PHP), который получил HTTP POST-запрос в xml для обновления/чтения или удаления некоторых данных в другом XML файле (использовать для хранения всех данных, мой клиент не хочет SQL или другое).

Но для моего теста с Simple Rest Client я просто отправил запрос один за другим, и все работало нормально!

Спустя короткое время мой клиент вернулся, потому что, если мы отправляем в то же время более одного запроса, он делает ошибку: только один процесс по текстовому файлу..

Для этого мой босс создал систему блокировки (создайте файл, который длится 1 мин), и теперь наша ошибка решена!

Но после этого у нас есть еще одна проблема... первый запрос в порядке, но все последующие запросы не в правильном порядке.

Вопросов :

  • Как попытаться смоделировать несколько запросов?

(на данный момент я просто открываю 2 или 3 окна и нажимаю на них, чтобы быстро отправить их)

  • Как заказать заказ на HTTP-POST-запрос?

Это мой первый вопрос здесь, и я тоже нехорошо писать на английском, поэтому, пожалуйста, будьте снисходительны и благодарны за ваше время.

Теги:
http-post

1 ответ

0
Лучший ответ

Благодаря JoErNanO я создаю mcve и самостоятельно нахожу ответы.

Для этого я пишу это:

// Detect if we got a file "lock"
$nb_file_lock = 0;
if($folder = opendir($GLOBALS['chemin']."XML")){
    while(false !== ($file = readdir($folder))){
        if($file != '.' && $file != '..' && $file != 'datas.xml'){
            $nb_file_lock++;
        }
    } 
    closedir($folder);
}

// If it not the first request
if($nb_file_lock > 0){
    // Recup the last lock file
    for($i=0;$i<30;$i++){
        if(file_exists($GLOBALS['chemin']."XML/lock_".$i)){
            $lockFile_before=$GLOBALS['chemin']."XML/lock_".$i;
            $last_lock_id=$i;
        }
    }
    // Create file "lock" +1
    $lockFile=$GLOBALS['chemin']."XML/lock_".($last_lock_id+1);
    $fp = fopen($lockFile, 'x');
    fclose($fp);
    // While "lock" exist : sleep
    while(file_exists($lockFile_before)){
        sleep(2);
    }
}else{
    // If not, create the first "lock" file
    $lockFile=$GLOBALS['chemin']."XML/lock_0";
    $fp = fopen($lockFile, 'x');
    fclose($fp);    
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню