使用php和pthreads或其他库进行sql查询的多线程处理
我想模拟拍卖中的出价,在大约30出价在1秒。但我不知道,我必须使用什么类?可堆叠还是共用?我使用。您想使用使用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
流式\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类中,我初始化它,并在工作类中声明一些连接到数据库的方法。