使用php和pthreads或其他库进行sql查询的多线程处理

使用php和pthreads或其他库进行sql查询的多线程处理,php,curl,pthreads,Php,Curl,Pthreads,我想模拟拍卖中的出价,在大约30出价在1秒。但我不知道,我必须使用什么类?可堆叠还是共用?我使用。您想使用流式\u套接字\u客户端 这几乎是PHP可以实现的多步操作。它可以处理30个连接,并且能够在每个套接字上返回结果。 创建投标 $bids[] = 'makebid/item8349/?bid=1.00'; $bids[] = 'makebid/item8350/?bid=1.50'; 创建“流程”: $timeout = 20; $result = array(); $sockets

我想模拟拍卖中的出价,在大约30出价在1秒。但我不知道,我必须使用什么类?可堆叠还是共用?我使用。

您想使用
流式\u套接字\u客户端

这几乎是PHP可以实现的多步操作。它可以处理30个连接,并且能够在每个套接字上返回结果。

创建投标

$bids[] = 'makebid/item8349/?bid=1.00';
$bids[] = 'makebid/item8350/?bid=1.50';
创建“流程”:

$timeout = 20; 
$result = array(); 
$sockets = array(); 
$buffer_size = 8192;
$id = 0;
foreach($bids as $bid){
  $stream = stream_socket_client("auction.com:80", $errno,$errstr, $timeout,
      STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); 
  if ($stream) {
    $sockets[$id++] = $stream;  // supports multiple sockets
    $http = "GET /$bid HTTP/1.0\r\nHost: auction.com\r\n\r\n"; 
    fwrite($stream, $http);
  } 
  else { 
    echo "$id Failed\n";
  } 
}
while (count($sockets)) {
  $read = $sockets; 
  stream_select($read, $write = NULL, $except = NULL, $timeout); 
  if (count($read)) {
    foreach ($read as $r) { 
      $id = array_search($r, $sockets); 
      $data = fread($r, $buffer_size); 
      if (strlen($data) == 0) { 
        echo "$id Closed: " . date('h:i:s') . "\n\n\n";
        fclose($r); 
        unset($sockets[$id]);
      } 
      else {
        $result[$id] .= $data; 
      }
    }
  }
  else { 
    echo 'Timeout: ' . date('h:i:s') . "\n\n\n";
    break;
  }
}
监控出价:

$timeout = 20; 
$result = array(); 
$sockets = array(); 
$buffer_size = 8192;
$id = 0;
foreach($bids as $bid){
  $stream = stream_socket_client("auction.com:80", $errno,$errstr, $timeout,
      STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); 
  if ($stream) {
    $sockets[$id++] = $stream;  // supports multiple sockets
    $http = "GET /$bid HTTP/1.0\r\nHost: auction.com\r\n\r\n"; 
    fwrite($stream, $http);
  } 
  else { 
    echo "$id Failed\n";
  } 
}
while (count($sockets)) {
  $read = $sockets; 
  stream_select($read, $write = NULL, $except = NULL, $timeout); 
  if (count($read)) {
    foreach ($read as $r) { 
      $id = array_search($r, $sockets); 
      $data = fread($r, $buffer_size); 
      if (strlen($data) == 0) { 
        echo "$id Closed: " . date('h:i:s') . "\n\n\n";
        fclose($r); 
        unset($sockets[$id]);
      } 
      else {
        $result[$id] .= $data; 
      }
    }
  }
  else { 
    echo 'Timeout: ' . date('h:i:s') . "\n\n\n";
    break;
  }
}

除了提供的信息量完全不足之外,您无法确定使用哪个类这一事实清楚地表明线程不适合您。该存储库中有许多示例,您可以将粘贴复制到代码中来模拟内容,但如果您无法确定要使用哪个示例,则说明线程不适合您想要做的事情。有更简单的方法,如果您的问题是如何在1秒内模拟30个请求,那么有很多方法。这完全取决于你想在一秒钟内“击中”30次的东西。发布一些代码。谢谢你的评论。我传播我的代码,但它是返回2,5出价每1秒<代码>$worker=new Bot('localhost:3307','auctionc_1','XeiThahg8z','auctionc_1')$worker->start();而($j++stack($stack[$j]);usleep(100);}在工作类中,我声明CURL进行投标,在Bot类中,我初始化它,并在工作类中声明一些连接到数据库的方法。