我正在测试我的代码,以检查如果我们认为有100个用户同时提交了他们的注册,它将如何表现!!!
我的代码在PHP Laravel 5.2中,JQuery Ajax在下面。
for (i = 0; i < 100; i++) {
var
data={'Role' : "Role"+i},
request = $.ajax({
url: 'http://localhost:1234/Practise/public/api/SaveRoleApi',
type: "POST",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
async: true,
success: function(d){ console.log(d); }
});
}
在100分中,我没有成功提交超过88条记录。
我正在使用MySQL数据库。
如果上面的代码会顺序添加记录... id有没有办法测试一台计算机的1000个并发请求?
答案 0 :(得分:3)
使用JavaScript从一个浏览器尝试创建所有连接的多个请求并不是一个好主意,您确实没有很好地测试并发性。
考虑使用像JMeter这样的实际负载测试工具(我绝对推荐这个),或者至少使用批处理脚本中的并行curl请求。
for n in {1..1000}; do
for i in `eval echo {$n..$((n+999))}`; do
echo "club $i..."
curl -X POST -H "Content-Type: application/json" -d '{"param1":"xyz","param2":"xyz"}' -s "http://localhost:1234/Practise/public/api/SaveRoleApi" >> log.txt
done &
wait
done
答案 1 :(得分:1)
我建议使用专门用于此目的的工具,如loader。请注意,您的网络应用应该可以从外部世界访问。
答案 2 :(得分:0)
您可能希望了解使用PHP curl的多功能。 http://php.net/manual/en/function.curl-multi-init.php
$mh = curl_multi_init();
$ch = [];
for ($i = 1; $i < 100; $i++) {
$data = "Role=Role$i";
$ch[$i] = curl_init();
curl_setopt($ch[$i], CURLOPT_URL, 'http://localhost:1234/Practise/public/api/SaveRoleApi');
curl_setopt($ch[$i], CURLOPT_POST, 1); // Number of post fields, in this case just one.
curl_steopt($ch[$i], CURLOPT_POSTFIELDS, $data);
curl_multi_add_handle($mh, $ch[$i]);
}
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc = CURLM_CALL_MULTI_PERFORM);
while ($active and $mrc == CURLM_OK) {
if(curl_multi_select($mh) !== -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
for($i = 0; $i < 100; $i++){
curl_multi_remove_handle($mh, $ch[$i]);
}
curl_multi_close($mh);