Посмотрите на
, если вы чувствуете себя комфортно и ваша среда позволяет вам продлевать занятия.
Он в основном расширяет класс SoapClient
, заменяет транспорт HTTP на curl, который может обрабатывать тайм-ауты:
class SoapClientTimeout extends SoapClient
{
private $timeout;
public function __setTimeout($timeout)
{
if (!is_int($timeout) && !is_null($timeout))
{
throw new Exception("Invalid timeout value");
}
$this->timeout = $timeout;
}
public function __doRequest($request, $location, $action, $version, $one_way = FALSE)
{
if (!$this->timeout)
{
// Call via parent because we require no timeout
$response = parent::__doRequest($request, $location, $action, $version, $one_way);
}
else
{
// Call via Curl and use the timeout
$curl = curl_init($location);
curl_setopt($curl, CURLOPT_VERBOSE, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
$response = curl_exec($curl);
if (curl_errno($curl))
{
throw new Exception(curl_error($curl));
}
curl_close($curl);
}
// Return?
if (!$one_way)
{
return ($response);
}
}
}
Короткий ответ - да ... «Обычные центры уведомлений доставляют уведомления в потоке, в котором оно было опубликовано. Распределенные центры уведомлений доставляют уведомления в основном потоке».
Однако, У Apple есть документы по этому поводу, которые могут оказаться полезными, и из которых была взята приведенная выше цитата:
Темы программирования уведомлений: Доставка уведомлений в определенные потоки
Просто позаботился об этом сам, постыдно:
Из ссылки на класс: NSNotificationCenter отправляет все уведомления синхронно
Кроме того, если вы предпочитаете, вы можете использовать NSNotificationQueue для асинхронной публикации уведомлений