【发布时间】:2013-03-28 00:42:24
【问题描述】:
当使用 azure-sdk-for-php 长轮询 Azure 队列存储时,如果我的请求间隔超过 30 秒,则库会因以下错误而终止:
PHP Notice: fwrite(): send of 277 bytes failed with errno=32 Broken pipe in ..../vendor/pear-pear.php.net/HTTP_Request2/HTTP/Request2/SocketWrapper.php on line 188
如果我将 sleep 功能设置为 30 秒,一切都会很好,但我会发出很多我不需要的请求。
我的工人代码:
use WindowsAzure\Common\ServicesBuilder;
use WindowsAzure\Common\ServiceException;
Class Worker_Task {
public $queueRestProxy;
public $servicesBuilder;
public $connectionString;
public function __construct() {
$this->connectionString = Config::get('azure.connection_string');
$this->servicesBuilder = ServicesBuilder::getInstance();
$this->queueRestProxy = $this->servicesBuilder->createQueueService($this->connectionString);
}
public function emails() {
$this->write('Processing mails...');
while(true) {
$this->queueRestProxy = $this->servicesBuilder->createQueueService($this->connectionString);
// Get message.
$listMessagesResult = $this->queueRestProxy->listMessages("emails");
$messages = $listMessagesResult->getQueueMessages();
foreach($messages as $message) {
// Process Message
$content = json_decode($message->getMessageText());
// Dispatch Email
// Delete Job
$this->deleteJob('emails', $message->getMessageId(), $message->getPopReceipt());
}
sleep(30);
}
}
}
【问题讨论】:
-
/SocketWrapper.php 的第 180-200 行是什么??
-
@Yokhannan 他们正在使用 PEAR 包 (HTTP_Request2)。我已经根据您要求的行创建了一个要点:gist.github.com/fedeisas/5331164#file-socketwrapper-php-L175。谢谢1
标签: php sockets azure long-polling azure-storage-queues