php Web服务没有';t不能同时处理多个请求


php webservice doesn't handle multiple requests at the same time

我开发了一个Web服务(PHP/MMySQL),它只需通过JSON字符串输出优惠券代码。

工作方式:应用程序收到1个参数(电子邮件),然后向数据库表发出请求,以获取尚未分配的优惠券代码。然后请求更新此优惠券代码的行,并将"1"放在指定的列中。(SELECT/UPDATE例程)

之后,JSON输出如下:

echo '{"couponCode": "'. $coupon_code . '"}';

仅此而已。

问题是网络服务在大约1分钟内收到10000个请求。这种情况一天只发生一次。如果我查看apache的原始日志,我可以看到它每次都收到了10000个请求,但在我的表中只有984行被更新(即:给出了984个优惠券代码)。我测试了很多次,每次都在980到986之间。Web服务创建的日志文件没有显示任何错误,并且准确地反映了数据库中更新的内容,每次更新980到986行。

我的问题是:丢失的请求发生了什么?是服务器没有足够的内存在这么短的时间内处理这样多个请求吗?(当我测试5000个请求时,它工作正常)

如果它可以帮助,这里的功能,得到一个新的优惠券代码:

function getNewCouponCode($email){
$stmt = $this->connector->prepare("SELECT * FROM coupon_code WHERE email = '' ORDER BY id ASC LIMIT 1");
$stmt2 = $this->connector->prepare("UPDATE coupon_code SET email = :email WHERE id = :id");
try{
    $this->connector->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $this->connector->beginTransaction();
    $this->connector->exec("LOCK TABLES coupon_code WRITE");
    /*TRANSACTION 1*/
    $stmt->execute();
    $result["select"] = $stmt->fetch(PDO::FETCH_ASSOC);
    /*TRANSACTION 1*/
    /*TRANSACTION 2*/
    $stmt2->bindParam(":email", $email);
    $stmt2->bindParam(":id", $result["select"]["id"]);
    $result["update"] = $stmt2->execute();
    /*TRANSACTION 2*/
    $this->connector->commit();
    $this->connector->exec('UNLOCK TABLES');
    return $result;
}catch(Exception $e) {
    $this->connector->rollBack();
    $this->connector->exec('UNLOCK TABLES');
    $result["error"] = $e->getMessage();
    return $result;
}
}

提前谢谢。

986个请求每分钟对于PHP应用程序和Apache web服务器来说是相当大的负载。听起来这一切都是在一台服务器上运行的。

首先,任何每分钟冲击你10公里的东西都应该知道,如果失败了,以后要重新尝试。为什么没有发生这种事?如果远程系统在你的控制之下,看看你是否能解决这个问题。

接下来,您会发现Nginx的线程模型比Apache的线程模型更高效。

现在,转到您的应用程序。。。看起来你实际上并不需要CCD_ 1然后CCD_。为什么不只是更新,并检查结果?然后它本身就是原子的,你不必做这种锁表的事情(这真的会让你慢下来)。