如何为 HTTP-POST 请求下命令?
How to give an order for HTTP-POST request?
嗨!
案例:
我写了一个 API (in PHP) 在 xml 收到 HTTP POST 请求到 update/read 或删除另一个 xml 文件中的一些数据 (用于存储所有数据,我的客户不想要 SQL 或其他东西)。
但是对于我使用 Simple Rest Client 的测试,我只是一个一个地发送请求,一切正常!
不久之后,我的客户回来了,因为如果我们同时发送多个请求,则会出错:文本文件只有一个进程..
为此,我的老板制作了一个 "lock" 系统(创建一个持续 1 分钟的文件),
现在我们的错误已解决!
但在那之后,我们又遇到了另一个问题......第一个请求没问题,但是接下来的所有请求都没有按正确的顺序排列。
问题:
- 如何尝试模拟多个请求 post ?
(现在我只是打开 2 或 3 window 然后点击每个快速发送)
- 如何为 HTTP-POST 请求下订单?
这是我的第一个问题,我也不太会用英文写,所以请多多包涵,感谢您的宝贵时间。
感谢 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's 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);
}
嗨!
案例: 我写了一个 API (in PHP) 在 xml 收到 HTTP POST 请求到 update/read 或删除另一个 xml 文件中的一些数据 (用于存储所有数据,我的客户不想要 SQL 或其他东西)。
但是对于我使用 Simple Rest Client 的测试,我只是一个一个地发送请求,一切正常!
不久之后,我的客户回来了,因为如果我们同时发送多个请求,则会出错:文本文件只有一个进程..
为此,我的老板制作了一个 "lock" 系统(创建一个持续 1 分钟的文件), 现在我们的错误已解决!
但在那之后,我们又遇到了另一个问题......第一个请求没问题,但是接下来的所有请求都没有按正确的顺序排列。
问题:
- 如何尝试模拟多个请求 post ?
(现在我只是打开 2 或 3 window 然后点击每个快速发送)
- 如何为 HTTP-POST 请求下订单?
这是我的第一个问题,我也不太会用英文写,所以请多多包涵,感谢您的宝贵时间。
感谢 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's 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);
}