Pull to refresh

SoapClient: параллельные асинхронные запросы, реконнект, обработка тайм-аутов

High performance *
Dklab_SoapClient — это расширенная версия стандартного PHP-класса SoapClient, предназначенная для параллельного (асинхронного) удаленного вызова процедур в высоконагруженных проектах.

При помощи этой библиотеки вы можете, например, строить страницу вашего сайта из блоков, как из конструктора. Каждый блок запрашивается через SOAP отдельно и независимо от других, при этом все запросы происходят параллельно. Если один из блогов не уложился в отведенное ему время (тайм-аут), то его можно не отображать на странице.

По сравнению со встроенным в PHP SoapClient, поддерживаются дополнительные возможности:
  • Одновременное, параллельное выполнение запросов к нескольким удаленным процедурам — ключевая особенность библиотеки. Если страница на вашем сайте собирается из 5 удаленных блоков, каждый из которых генерируется по 100ms, их можно запустить параллельно и получить всю страницу целиком не за 500ms, а за те же самые 100ms.
  • Реконнект при невозможности установления связи. К сожалению, мир несовершенен, и из-за случайной потери пакетов первая попытка соединения с SOAP-сервером может закончиться тайм-аутом. Это особенно часто происходит, когда проект располагается в нескольких датацентрах. Dklab_SoapClient позволяет задать тайм-аут на время открытия соединения (например, 1 секунду) и, в случае неудачи, повторить попытку указанное число раз. На практике это снижает вероятность итогового сбоя в тысячи раз, т.к. реконнект почти всегда помогает при утере пакета.
  • Поддержка тайм-аута на получение данных. Если страница собирается из удаленных блоков, то в случае «подвисания» одного из них «зависает» и вся страница. В то же время, отсутствие одного из блоков при наличии остальных — не такая большая беда. Вы можете указать, сколько времени Dklab_SoapClient должен ждать ответа от удаленной процедуры; если время превышено, возникает исключение PHP, которое вы можете обработать по своему усмотрению, не прерывая загрузку остальных блоков.
Читать дальше →
Total votes 38: ↑34 and ↓4 +30
Views 6.9K
Comments 29

Асинхронная синхронность. JSDeferred

JavaScript *
В последнее время на хабре появилось несколько статей про работу с асинхронными вызовами (После всех асинхронных вызовов, Синхронизация асинхронных вызовов. WaitSync). Но при ближайшем рассмотрении область их применения довольно узка так как эти способы не решают всех проблем.
Но для начала попробуем определить эти самые проблемы, с которыми мы сталкиваемся при работе с асинхронными вызовами.
Читать дальше →
Total votes 48: ↑44 and ↓4 +40
Views 6.1K
Comments 31

Как организовать взаимодействие процессов в Oracle BPM

Oracle corporate blog Oracle *
Сложно представить себе полностью изолированный процесс, т.е. выполнение задач без необходимости обращения к внешним информационным источникам и в большинстве случаев BPMN процесс представляет из себя оркестровку таких вызовов. Причем он может обращаться как синхронно так и асинхронно к интеграционным сервисам приложений, другим BPMN или BPEL процессам. Масса реальных задач требует от архитекторов и разработчиков серьезного подхода к вопросу организации взаимодействия решения с «внешним» миром и дело здесь не ограничивается исключительно интеграционным подходом, важно поддерживать сам контекст подобных связей.

Oracle BPM предлагает такие механизмы взаимодействия, которые способны поддерживать сложную коммуникационную среду из разнородных приложений и процессов, где, к примеру, параллельно выполняющиеся потоки работ могут свободно «общаться» друг с другом по ходу выполнения. Т.о. можно выстроить цепочку связей из взаимозависимых задач разных процессов, широко применяя т.н. модульный подход. Модульный подход, в свою очередь, позволяет сэкономить массу времени при разработке и сопровождения решений, т.к. модули могут разрабатываться и тестироваться независимо друг от друга и многократно использоваться в разных частях процесса.
Читать дальше →
Total votes 6: ↑5 and ↓1 +4
Views 2.6K
Comments 2