应集团要求给服务号做了个抢单秒杀的功能,需要对秒杀做个测试,想试试 PHP 多线程,就模拟了下抢单功能。
先说秒杀模块的思路:
正常情况下的用户秒杀操作
1、发起秒杀请求
2、进入秒杀队列
3、随机滞后 1 - 2 秒进行秒杀结果查询请求(算是变相分流吧)
4、成功则生成订单
5、返回结果
以下是模拟秒杀的代码:
<?php
set_time_limit(0);
/**
* 线程的执行任务
*/
class Threadrun extends Thread
{
public $url;
public $data;
public $params;
public function __construct($url, $params=[])
{
$this->url = $url;
$this->params = $params;
}
public function run()
{
if(($url = $this->url))
{
$params = [
'goods_id' => 1,
'activity_id' => 1,
'user_id' => isset($this->params['user_id']) ? $this->params['user_id'] : $this->getCurrentThreadId(),
];
$startTime = microtime(true);
$this->data = [
'id' => $params['user_id'],
'result' => model_http_curl_get( $url, $params ),
'time' => microtime(true)-$startTime,
'now' => microtime(true),
];