КОНВЕЙЕР ОБРАБОТКИ СООБЩЕНИЙ ДЛЯ ПОТОКОВ
MESSAGE PIPE FOR STREAMS

Настоящее изобретение относится к обработке сообщений. Конкретнее, настоящее изобретение относится к способам, системам и компьютерным программным продуктам, которые снижают требования к буферам для обработки сообщений и поэтому позволяют системе обмена сообщениями посылать или принимать относительно большие сообщения, используя буфер заданного размера.
Обработка сообщений происходит в различных ситуациях, в том числе в поддержке распределенных приложений, обычно в протоколах связи и т.п. Одна из проблем, с которыми постоянно сталкиваются системы обработки сообщений, относится к обработке сообщений неограниченного размера. Традиционные системы обработки сообщений обычно буферизируют сообщения разумного размера, но большие сообщения приводят к требованиям непредсказуемой и, возможно, сверхбольшой памяти, если не отказа от нее. «Большие» представляет собой относительное выражение и частично зависит от самой системы обработки сообщений. Но по мере того, как увеличиваются скорости в сети, увеличивается и размер сообщений, особенно с учетом популярности обмена мультимедийным и графическим содержимым. Хотя в терминах полосы пропускания сети многомегабайтовые сообщения могут больше не представлять значительной проблемы, но, принимая во внимание соображения обработки, включая как память, так и время обработки, многомегабайтовое сообщение может представлять заметную перегрузку для систем обмена сообщениями, особенно если эти сообщения принимаются на регулярной, до некоторой степени, основе.
Конечно же, компьютеры с чрезвычайно возросшими вычислительной мощностью и доступной памятью становятся все менее дорогими, смягчая некоторые из требований к ресурсам, вызываемых большими сообщениями. Принимая во внимание аппаратурные усовершенствования за последние несколько лет, один подход может включать в себя увеличение доступных размера буфера и скорости обработки для учета больших сообщений. Наибольшая часть сообщений имеет тенденцию к сравнительно малому размеру, так что один ход рассуждений предполагает, что случайное большое сообщение не представляет значительной проблемы.
Имеется по меньшей мере два соображения, что этот ход рассуждений не годится для рассмотрения. Первым и главным является посылка, что большое сообщение будет приходить лишь изредка. Всегда существует возможность, что система обмена сообщениями подвергнется отказу сервисной атаки. В общем случае отказ сервисной атаки пытается подавить часть аппаратного обеспечения запросами, которые занимают больше времени на обработку для принимающего компьютера, чем время на генерирование для посылающего компьютера или компьютеров. Посылка больших сообщений в систему обработки сообщений представляет собой логическую стартовую площадку для умышленных отказов сервисной атаки, и потому предположение, что большие сообщения будут приниматься только изредка, является опасной стратегией в обращении с большими сообщениями. Во-вторых, многие системы обработки сообщений время от времени работают на пределе пропускной способности, так что нельзя игнорировать возможность прибытия большого сообщения в то время, когда система занята.
Вследствие этих и других проблем, имеющихся в традиционных системах обмена сообщениями, желательны способы, системы и компьютерные программные продукты для снижения требований к буферу при обработке сообщений, чтобы система обмена сообщениями могла посылать и принимать относительно большие сообщения с помощью заданного размера буфера.
Настоящее изобретение относится к способам, системам и компьютерным программным продуктам, которые снижают требования к буферу в системе обмена сообщениями, чтобы эта система обмена сообщениями могла посылать и принимать относительно большие сообщения с помощью буфера заданного размера. В соответствии с примерными вариантами выполнения настоящего изобретения, которые более полно описываются ниже, система обмена сообщениями посылает сообщения на конечный пункт или принимает сообщения от конечного пункта с помощью одного или более средств передачи сообщений. Система обмена сообщениями может быть промежуточной для маршрутизации объекта сообщения или же конечной, которая посылает и принимает сообщения.
В одном примерном варианте выполнения предусматриваются один или более обработчиков сообщений, каждый из которых идентифицирует соответствующую операцию обработки для выполнения над объектом сообщения. Объект сообщения включает в себя поточную часть с потоковым интерфейсом. Предусматривается также конвейер для управления одним или более обработчиками как упорядоченным набором. Объект сообщения обрабатывается одним или более обработчиками сообщений в конвейере сообщений так, что по меньшей мере один обработчик сообщений инкапсулирует поточную часть ее соответствующей операцией обработки. Эта соответствующая операция обработки подлежит выполнению в будущем и инкапсулирует поточную часть объекта сообщения без материализации этой поточной части в буфере. В некоторых вариантах выполнения может быть предусмотрено множество конвейеров, в том числе вложенные конвейеры, для обработки объекта сообщения различными обработчиками сообщений.
Если конвейер содержит несколько обработчиков сообщений, то каждый из этих обработчиков может заключать поточную часть в оболочку, так что операции обработки, соответствующие этим обработчикам сообщений, наслаиваются на поточную часть объекта сообщения. Этот объект сообщения может включать в себя одну или более заголовочных частей, одну или более корпусных частей и одну или более вложенных частей, причем по меньшей мере корпусные и/или вложенные части в общем случае включают в себя поточную часть объекта сообщения.
В примерных вариантах выполнения объект сообщения может быть, к примеру, сообщением Простого протокола доступа к объекту (ППДО) (SOAP). Для маршрутизации и иной обработки сообщения ППДО обработчики для этого сообщения могут быть буферизованы или материализованы для доступа без необходимости материализации поточной части. Маршрутизация может включать в себя дублирование объекта сообщения для доставки к нескольким конечным пунктам.
Вызов одного или более обработчиков сообщений в конвейере сообщений может происходить до того, как поточной части объекта сообщения назначается поток. Из-за того что поточная часть не должна материализоваться, когда вызываются обработчики сообщений, операции обработки обработчиков сообщений в конвейере могут сначала идентифицироваться для сообщения, а затем, позднее, поточной части объекта сообщения может быть назначен фактический поток, над которым будут выполняться операции. Отправка объекта сообщения к другому конечному пункту или прием объекта сообщения от другого конечного пункта могут вызывать операции обработки, подлежащие выполнению над поточной частью, которые инкапсулируют эту поточную часть.
Дополнительные признаки и преимущества изобретения будут излагаться в нижеследующем описании и частично будут очевидны из этого описания или могут быть изучены при осуществлении изобретения. Признаки и преимущества изобретения могут быть реализованы и получены посредством инструментов и комбинаций, указанных, в частности, в приложенной формуле изобретения. Эти и иные признаки настоящего изобретения станут ясны более полно из последующего описания и приложенной формулы изобретения либо могут быть изучены при осуществлении изложенного здесь изобретения.
Для того чтобы описать метод, которым можно получить вышеприведенные и другие преимущества и признаки изобретения, будет приведено более конкретное описание изобретения, кратко описанного выше, посредством ссылок на конкретные варианты его выполнения, которые иллюстрируются на прилагаемых чертежах. В понимании того, что эти чертежи показывают только типичные варианты выполнения изобретения, а потому не должны рассматриваться как ограничивающие его объем, изобретение будет описано и пояснено с дополнительной конкретизацией и подробностями за счет применения сопровождающих чертежей, на которых:
Фиг. 1 иллюстрирует примерное сообщение для обработки системой обмена сообщениями согласно настоящему изобретению;
Фиг. 2А показывает пример считывания объекта сообщения из потока;
Фиг. 2В показывает пример записи объекта сообщения в поток;
Фиг. 3А иллюстрирует примерный конвейер для обработки объекта сообщения;
Фиг. 3В иллюстрирует пример вложенного конвейера для обработки объекта сообщения;
Фиг. 4 иллюстрирует оборачивание или инкапсулирование поточного содержания сообщения объекта сообщения;
Фиг. 5А-5С показывают пример маршрутизации объекта сообщения;
Фиг. 6 иллюстрирует пример дублирования объекта сообщения без необходимости буферизовать поточную часть;
Фиг. 7А-7В показывают примерные действия и шаги для способов обработки объекта сообщения, которые снижают требования к буферу согласно настоящему изобретению; и
Фиг. 8 иллюстрирует примерную систему, которая предоставляет подходящую операционную среду для настоящего изобретения.
Настоящее изобретение распространяется на способы, системы и компьютерные программные продукты для обработки объекта сообщения, которые снижают требования к буферу для по меньшей мере части объекта сообщения. За счет снижения этих требований к буферу настоящее изобретение позволяет системе обмена сообщениями посылать и принимать с помощью заданного размера буфера относительно бульшие сообщения, нежели те, которые были бы возможны в противном случае. Варианты выполнения по настоящему изобретению могут содержать один или более специализированных и/или один или более универсальных компьютеров, в том числе различные виды компьютерного аппаратного обеспечения, как это подробнее обсуждается ниже.
Фиг. 1 иллюстрирует примерный объект 100 сообщения для обработки системой обмена сообщениями согласно настоящему изобретению. Сообщение представляет собой базовый блок связи между конечными пунктами. Объект 100 сообщения включает в себя совокупность 110 заголовков, которая содержит заголовок 112, заголовок 114, заголовок 116 и, возможно, прочие. Объект 100 сообщения включает в себя также содержание 120. Как показано, совокупность 110 заголовков объекта 100 сообщения буферизуется, тогда как содержание 120 направляется в поток. Одна мотивация для буферизации заголовков объекта сообщения состоит в том, что заголовки, как правило, используются, когда принимается решение, что делать с сообщением, прежде чем действительно сделать это. Например, чтобы маршрутизировать объект 100 сообщения к надлежащему конечному пункту, нужно, как правило, проверить некоторые заголовки. Однако маршрутизация обычно не требует проверки содержания. Соответственно направление содержания 120 в поток и маршрутизация заголовков для удобства при некоторых обстоятельствах могут быть приемлемы.
Разумеется, буферизация совокупности 110 заголовков и направление содержания 120 в поток является лишь одним примером макета сообщения. Вследствие того, что заголовки относительно малы и довольно хорошо определены, они не проявляют неограниченных требований к буферу, которые имеют место для содержания сообщения. Тем не менее, ничто в настоящем изобретении не исключает направления в поток всего объекта 100 сообщения, в том числе и совокупности 110 заголовков. Далее, следует подчеркнуть, что макет объекта 100 сообщения представляет собой лишь один из множества возможных макетов. Хотя объекты 100 сообщения будут часто включать в себя по отдельности совокупность 110 заголовков и содержание 120 или корпус, настоящее изобретение не ограничивается никаким конкретным макетом сообщения, и любые ссылки на конкретные макеты сообщения следует рассматривать только в качестве примеров.
Макет объекта 100 сообщения в целом соответствует сообщению Простого протокола доступа к объекту (ППДО) (SOAP). ППДО представляет собой облегченный протокол обмена сообщениями, базирующийся на расширяемом языке разметки (eXtensible Markup Language - XML), который используется для кодирования информации в запросных и ответных сообщениях сетевых услуг перед их отправкой по сети. Сообщения ППДО хорошо приспособлены для сетевых услуг и могут передаваться и кодироваться с помощью любого из протоколов Интернета, таких как упрощенный протокол передачи почты (SMTP), протокол передачи гипертекста (НТТР), многоцелевые расширения интернетной почты (MIME), непосредственное инкапсулирование интернетной почты (DIME) и т.п.
Универсальный процессор сообщений ППДО должен иметь доступ по меньшей мере к некоторым заголовкам, имеющимся в сообщении, чтобы определять правильную обработку. Как более подробно описано ниже, в примерном варианте выполнения для обработки сообщения можно использовать конвейер из обработчиков сообщений. Каждый из этих обработчиков может проверять ноль и более присутствующих в сообщении заголовков и оперировать ими. (Обработчики эти могут также проверять направленное в поток содержимое сообщения и оперировать с ним.) Объединенное действие этих обработчиков определяет обработку, которая будет воздействовать на сообщение. Когда процессор ППДО завершает свою работу, он пропускает сообщение к целевому получателю этого сообщения.
Отметим, однако, что в этом состоянии процессор ППДО не нуждается в материализации всего сообщения в буфере, чтобы выполнять правильную обработку этого сообщения. В частности, процессору ППДО нужно только иметь доступ к конкретным заголовочным элементам и, быть может, даже к некоторым корпусным элементам, но не нужно иметь доступ ко всем прочим. Соответственно в описанном ниже примерном варианте выполнения разные заголовки сообщения ППДО могут буферизоваться, тогда как корпус сообщения ППДО буферизуется, только когда это потребуется. Предоставление корпуса сообщения ППДО только по мере надобности достигается, по существу, путем пропускания ссылки на корпус и разрешения потребителям извлекать содержание по требованию.
В примерном варианте выполнения совокупность 110 заголовков сообщения имеет поисковый способ для поиска отдельных заголовков в этой совокупности заголовков. Поиск используется обычно специализированными под заголовки обработчиками сообщений, чтобы извлекать подходящий заголовок по типу заголовка, по названию элемента XML этого заголовка, по пространству имен XML, которые определяет заголовок, и/или по действующему/исполняющему субъекту, соответствующему конечному пункту, для которого предназначен этот заголовок. Все заголовки буферизуются для простоты в условиях ограничений доступной памяти, но, как указано выше, ничто в настоящем изобретении не препятствует направлять в поток один или более заголовков, если это приемлемо для конкретного воплощения. Для дальнейшей защиты против отказов сервисных атак, для буферизации заголовков может быть установлена квота памяти, например 32 КБайт.
Фиг. 2А-2В показывают примеры считывания объекта сообщения из потока и запись объекта сообщения в поток. Форматтеры 230А и 230В осуществляют преобразование между потоковым представлением сообщения и хранящимся в памяти экземпляром сообщения. Когда сообщение принимается по сети от другого конечного пункта, форматтер 230А считывает 220А из потока 210А и вызывает 240А обработчик 250А сообщений, чтобы обработать это сообщение. Аналогично, когда сообщение посылается по сети к другому конечному пункту, форматтер 230В записывает 220В в поток 210В из хранящегося в памяти экземпляра, выданного обработчиком 250В сообщений. Как описано выше, обычно обработчики 250А и 250В сообщений будут одним или более конвейерами из обработчиков сообщений.
Фиг. 3А-3В иллюстрируют примерные конвейеры для обработки объекта сообщений. Последовательное исполнение обработчиков сообщений является обычным образцом обработки сообщений. Конвейеры упрощают управление асинхронными обработчиками кодовых сообщений. Конвейер представляет собой обработчик сообщений и может использоваться везде, где можно использовать обработчик сообщений. На фиг. 3А конвейер 330 включает в себя обработчик 332 сообщений, обработчик 334 сообщений и обработчик 336 сообщений. Когда конвейер 330 вызывается для обработки сообщения 300, этот конвейер вызывает каждый обработчик сообщений в своей совокупности по одному для того, чтобы обработать сообщение. Воздействие, которое конвейер сообщений оказывает на поточное содержание, будет более подробно описываться ниже.
Поскольку конвейер является обработчиком сообщения, конвейеры могут быть вложенными, как показано на фиг. 3В. Как описано выше в связи с фиг. 3А, когда конвейер вызывается, чтобы обработать сообщение 300, это сообщение проходит через каждый обработчик в конвейере (до тех пор пока не произойдет ошибка или обработчик не решит, что дальнейшая обработка должна быть приостановлена). Если один из обработчиков в конвейере сам является конвейером, как показано на фиг. 3В, сообщение проходит через каждый из этих обработчиков и т.д. На фиг. 3В конвейер 330 имеет три обработчика сообщений: обработчик 332 сообщений, конвейер 340 и обработчик 336 сообщений. Конвейер 340 также имеет три обработчика сообщений: обработчик 342 сообщений, обработчик 344 сообщений и обработчик 346 сообщений. Порядок, в котором вызываются обработчики, показан линией. Если обработчик сообщений, такой как обработчик 344 сообщений, указывает, что больше не должно происходить никакой обработки, ни обработчик 346 сообщений, ни обработчик 336 сообщений не будут вызываться. Конечно же, проиллюстрированные на фиг. 3А-3В конвейеры представляют собой примеры относительно простых конвейеров, и следует понимать, что могут использоваться гораздо более сложные конвейеры.
Фиг. 4 иллюстрирует оборачивание или инкапсулирование поточного содержания сообщения в объекте сообщения. Для поточного содержания сообщения обработчики сообщения, такие, как показанные на фиг. 3А-3В обработчики сообщения, оборачивают или инкапсулируют поточное содержание сообщения операцией обработки обработчика сообщений. Оборачивание или инкапсулирование происходят потому, что для того, чтобы выполнять операцию обработки над поточным содержанием сообщения в момент, когда вызывается обработчик сообщения, потребуется буферизация или материализация поточного содержания сообщения, что сорвало бы цель иметь содержание сообщения в качестве потока.
Как показано на фиг. 4, поточное содержание 420 сообщения в сообщении 400 обернуто или инкапсулировано различными операциями обработки по мере того, как оно проходит через конвейер 410. Обработчик 432 сообщений инкапсулирует поточное содержание 420 сообщения операцией 432А обработки. Обработчик 434 сообщений оборачивает поточное содержание 420 и операцию 432А обработки операцией 434А обработки. Наконец, обработчик 436 сообщений инкапсулирует поточное содержание 420, операцию 432А обработки и операцию 434А обработки операцией 436А обработки.
При наличии этих операций обработки, наслоенных на поточное содержание, когда потребитель начинает обращаться к этому поточному содержанию, будет выполняться подходящая операция обработки, упорядоченная по мере того, как вызываются обработчики сообщений в конвейере 410 без необходимости материализовать поточное содержание. В результате требования к буферу для обрабатываемого сообщения 400 снижаются, что позволяет системе обмена сообщениями посылать или принимать относительно большие сообщения с помощью буфера заданного размера. Как указано выше, наслоенные обработки делают также систему обмена сообщениями менее уязвимой к отказам сервисных атак, базирующихся на больших сообщениях, потому что эта система обмена сообщениями может выполнять бульшую часть требуемой обработки без необходимости материализовать содержание, что, в частности, дает преимущество, если система обмена сообщениями выполняет маршрутизирующую функцию, как описано ниже в отношении фиг. 5А-5С. Следует отметить, что некоторая буферизация поточного содержания будет, вероятно, происходить по мере того, как происходит обращение к частям или фрагментам потока, но эта буферизация ограничена, потому что она основана на размере фрагмента, а не на всем потоке. В своем конечном пункте и в промежуточных пунктах принятое содержание потока может просто записываться в другой поток, такой как диск в конечном пункте или поток для следующего сетевого сегмента.
На этой стадии может быть полезно обсудить фиг. 4 в терминах двух более конкретных примеров. Предположим, что конвейер 410 подготавливает поточное содержание 420 для подлежащего записи сообщения 400. Обработчик 432 сообщений включает в себя операцию 432А цифровой подписи, обработчик 434 сообщений включает в себя операцию 434А шифрования, а обработчик 436 сообщений включает в себя операцию 436А сжатия. По мере того, как сообщение 400 проходит через конвейер 410, операция 432А цифровой подписи, операция 434А шифрования и операция 436А сжатия наслаиваются поверх инкапсулированного или обернутого поточного содержания 420. Соответственно, когда поточное содержание 420 записывается для передачи, поточное содержание 420 снабжается частями или фрагментами потока, которые приобретают цифровую подпись посредством операции 432А цифровой подписи, зашифровываются операцией 434А шифрования и сжимаются операцией 436А сжатия. Поэтому то, что записывается, представляет собой подписанный, зашифрованный и сжатый вариант поточного содержания 420.
Наоборот, предположим, что конвейер 410 подготавливает поточное содержание 420 для подлежащего считыванию сообщения 400. В случае считывания порядок обработчиков сообщений в конвейере 410 обратный по отношению к приведенному выше примеру записи. Обработчик 432 сообщений включает в себя операцию 432А декомпрессии, обработчик 434 сообщений включает в себя операцию 434А дешифрования, а обработчик 436 сообщений включает в себя операцию 436А проверки цифровой подписи. По мере того, как сообщение 400 проходит через конвейер 410, операция 432А декомпрессии, операция 434А дешифрования и операция 436А проверки цифровой подписи наслаиваются поверх инкапсулированного или обернутого поточного содержания 420.
Соответственно, когда поточное содержание 420 считывается, поточное содержание 420 снабжается частями или фрагментами потока, которые декомпрессированы операцией 432А декомпрессии, дешифрованы операцией 434А дешифрования, а цифровая подпись проверена операцией 436А проверки цифровой подписи. Поэтому то, что считывается, представляет собой декомпрессированный дешифрованный и с проверенной цифровой подписью вариант подписанного, зашифрованного и сжатого поточного содержания 420. Наслаивание или инкапсулирование, которое происходит в конвейере 410, может воплощаться как последовательность экспортируемых функций для объектов, которые соответствуют операциям обработки в каждом обработчике сообщений. Иными словами, исходно мы начинаем с потока, затем операция декомпрессии делает этот поток декомпрессированным потоком, операция дешифрования делает поток дешифрованным декомпрессированным потоком, а операция проверки цифровой подписи делает этот поток проверенным дешифрованным декомпрессированным потоком, который представляет собой в точности то, что нужно для подписанного зашифрованного сжатого потока, который был принят. По мере выполнения каждой операции соответствующий объект сохраняет след того, чем была предыдущая операция, чтобы сформировать цепочку экспортированных функций. Это лишь одно из возможных воплощений для инкапсулирования или обертывания операций обработки, многие иные варианты воплощения возможны и должны рассматриваться в объеме инкапсулирования, обертывания или наслаивания.
Фиг. 5А-5С показывают пример маршрутизации объекта 500 сообщения. Фиг. 5А аналогична фиг. 1 в том, что объект 500 сообщения включает в себя совокупность заголовков 510, которая содержит заголовок 1 512, заголовок 2 514 и заголовок 3 516, и корпус 520. На фиг. 5В, когда объект 500 сообщения достигает маршрутизатора 530, маршрутизатор 530 просматривает совокупность заголовков 510, чтобы определить, как следует маршрутизировать это сообщение. Отметим, что, как обсуждалось выше, корпусную часть 520 объекта сообщения не нужно материализовать для маршрутизации, но можно обернуть. Затем, как показано на фиг. 5С, совокупность заголовков 510 и корпус 520 маршрутизируются соответствующим образом. При наличии обернутого корпуса 520 сообщения поток, считанный в маршрутизаторе 530, можно записать назад в маршрутизированный поток без необходимости в материализации. Поэтому требования к буферу для маршрутизатора снижаются, позволяя маршрутизатору 530 обрабатывать относительно большие сообщения для буфера заданного размера и делая маршрутизатор 530 более устойчивым к отказам сервисных атак.
Фиг. 6 иллюстрирует пример дублирования объекта сообщения без необходимости буферизовать поточную часть, например, при отправке объекта сообщения ко множеству конечных пунктов. Один из смыслов иметь основанную на потоке модель состоит в том, что один и тот же объект сообщения нельзя посылать дважды. Пересылающий код 660 позволяет посылать принятое сообщение и автоматически выполняет работу, необходимую для построения нового(-ых) сообщения(-ий).
Опять-таки, аналогично фиг. 1, исходное проводное сообщение 600 включает в себя совокупность заголовков 610 и поточный корпус 620. Совокупность заголовков 610 и часть 622 поточного корпуса 620 уже обработаны пересылающим кодом 660. Отметим, что проводное сообщение 600-1 конечного пункта 1 включает в себя копию совокупности 610 заголовков и корпусной части 622, назначенных в качестве совокупности 610-1 заголовков и корпусной части 622-1. Подобным же образом проводное сообщение 600-2 конечного пункта 2 также включает в себя копию совокупности 610 заголовков и корпусную часть 622, которые назначены в качестве совокупности 610-2 заголовков и корпусной части 622-2.
Фрагмент 624 корпуса 620 выступает в качестве потока 624А для пересылающего кода 660. Пересылающий код 660 считывает из потока 624А, чтобы вновь сформировать фрагмент 624 внутри пересылающего кода 660. Отметим, что пересылающий код 660 буферизует фрагмент 624 корпуса 620. Однако, как указывалось выше, буферизация фрагмента потока представляет ограниченный размер буфера в противоположность буферизации всего корпуса 620, которая представляет неограниченный буфер. Пересылающий код 660 записывает 664 фрагмент 624 в содержание 652-1 сообщения конечного пункта 1 и содержание 652-2 сообщения конечного пункта 2, которые выступают в качестве потоков 624А-1 и 624А-2 соответственно. Потоки 624А-1 и 624А-2 записываются затем в качестве фрагментов 624-1 и 624-2 в проводное сообщение 600-1 конечного пункта 1 и в проводное сообщение 600-2 конечного пункта 2. Когда пересылающий код 660 обрабатывает все из исходного проводного сообщения 600, конечный пункт 1 и конечный пункт 2 будут иметь копии.
Настоящее изобретение можно также описать в терминах способов, содержащих функциональные шаги и нефункциональные операции. Нижеследующее является описанием операций и шагов, которые могут выполняться при применении настоящего изобретения на практике. Обычно функциональные шаги описывают изобретение в терминах результата, который достигается, тогда как нефункциональные операции описывают более конкретные действия для достижения конкретного результата. Хотя функциональные шаги и нефункциональные операции могут описываться или заявляться в конкретном порядке, настоящее изобретение не обязательно ограничено какими-либо конкретными порядком или комбинацией операций и/или шагов.
Фиг. 7А-7В показывают примерные операции и шаги для способов обработки объекта сообщения, которые снижают требования к буферу согласно настоящему изобретению. Шаг (710) задания определения объекта для объекта сообщения может содержать операцию (712) создания определения объекта сообщения для объекта сообщения, каковое определение определяет по меньшей мере поточную часть и соответствующий ориентированный на поток интерфейс. Шаг (720) обеспечения одного или более обработчиков сообщений, каждый из которых идентифицирует соответствующую операцию обработки для выполнения над объектом сообщения, может содержать операцию (722) определения одного или более обработчиков сообщений. Шаг (730) обеспечения конвейера сообщения, содержащего упорядоченную совокупность одного или более обработчиков сообщений, может содержать операцию (732) идентифицирования и упорядочивания одного или более подлежащих включению в конфигурируемый конвейер обработчиков сообщений.
Шаг (740) обработки объекта сообщения одним или более обработчиками сообщений такого конвейера сообщений, что по меньшей мере один обработчик сообщений инкапсулирует поточную часть объекта сообщения, может включать в себя операцию (742) вызова одного или более обработчиков сообщений. Примерный способ согласно настоящему изобретению может включать в себя операцию (752) назначения потока для поточной части объекта сообщения. Как указывалось выше, это назначение может происходить после вызова одного или более обработчиков сообщений в конвейере сообщений.
Шаг (760) буферизации одной или более непоточных частей объекта сообщения может включать в себя операцию (762) сохранения одной или более непоточных частей в буфере. Шаг (790) приема объекта сообщения из другого конечного пункта или промежуточного пункта может включать в себя операцию (792) считывания объекта сообщения из потока передачи сообщений. Шаг (780) отправки объекта сообщения к другому конечному пункту или дублирования объекта сообщения для доставки нескольким конечным пунктам может включать в себя операцию (782) записи объекта сообщения в поток передачи сообщений. Отметим, что как считывание, так и запись могут вызвать выполнение операций обработки из обработчиков сообщений над поточной частью объекта сообщения. Примерный способ согласно настоящему изобретению может включать в себя далее операцию материализации поточной части объекта сообщения по запросу.
Варианты выполнения в объеме настоящего изобретения включают в себя также машинно-читаемый носитель данных для хранения или присутствия на нем исполняемых в компьютере команд или структур данных. Такой машинно-читаемый носитель данных может быть любым доступным носителем, к которому может обращаться универсальный или специализированный компьютер. В качестве примера, - но не ограничения, - такой машинно-читаемый носитель данных может содержать ОЗУ, ПЗУ, ЭСППЗУ, ПЗУ-КД (ПЗУ на компакт-диске) или другую оптическую дисковую память, магнитную дисковую память или иные магнитные запоминающие устройства, либо любой другой носитель данных, который может использоваться для переноса или хранения желательного программного кодового средства в виде исполняемых компьютером команд или структур данных и к которому может обращаться универсальный или специализированный компьютер. Когда информация переносится или предоставляется по сети или иному соединению связи (как проводному, беспроводному, так и комбинации проводного или беспроводного) к компьютеру, этот компьютер должным образом просматривает соединение как машинно-читаемый носитель данных. Тем самым любое такое соединение справедливо называется машинно-читаемым носителем данных. Комбинации вышеуказанных средств также должны быть включены в объем машинно-читаемого носителя данных. Исполняемые компьютером команды содержат, к примеру, команды и данные, которые заставляют универсальный компьютер, специализированный компьютер или устройство обработки специального назначения выполнять заданную функцию или группу функций.
Фиг. 8 и нижеследующее обсуждение направлены на получение беглого общего описания подходящей вычислительной среды, в которой можно воплотить изобретение. Изобретение, хотя это и не требуется, будет описано в общем контексте исполняемых компьютером команд, таких как программные модули, исполняемые компьютерами в сетевых средах. В целом, программные модули включают в себя подпрограммы, программы, объекты, компоненты, структуры данных и т.п., которые выполняют задачи или воплощают конкретные типы абстрактных данных. Исполняемые компьютером команды, связанные структуры данных и программные модули представляют примеры программных кодовых средств для выполнения шагов раскрытого здесь способа. Конкретная последовательность таких исполняемых команд или связанных структур данных представляют примеры соответствующих операций для воплощения функций, описанных в таких шагах.
Специалисты поймут, что изобретение может быть реализовано в сетевых вычислительных средах с конфигурациями компьютерных систем многих видов, включая персональные компьютеры, карманные устройства, многопроцессорные системы, основанная на микропроцессорах или программируемая бытовая электроника, сетевые ПК, миникомпьютеры, мейнфреймовые компьютеры и т.п. Изобретение можно также реализовать в распределенных - компьютерных средах, где задачи выполняются местными или удаленными устройствами обработки, которые связаны (либо проводными линиями, беспроводными линиями, либо комбинацией проводных или беспроводных линий) через сеть связи. В распределенной вычислительной среде программные модули могут располагаться как в местном, так и в удаленном запоминающих устройствах.
На фиг. 8 примерная система для воплощения изобретения включает в себя универсальное вычислительное устройство в виде традиционного компьютера 820, содержащего блок 821 обработки, системную память 822 и системную шину 823, которая связывает различные системные компоненты, включая системную память 822 с блоком 821 обработки. Системная шина 823 может быть любой из нескольких типов шинных структур, в том числе шиной памяти или контроллером памяти, периферийной шиной и локальной шиной, использующей любую из множества шинных архитектур. Системная память включает в себя постоянно запоминающее устройство (ПЗУ) (ROM) 824 и оперативное запоминающее устройство (ОЗУ) (RAM) 825. В ПЗУ 824 может храниться базовая система ввода/вывода (BIOS) 826, содержащая базовые подпрограммы, такие как запуск, которые помогают переносить информацию между элементами в компьютере 820.
Компьютер 820 может также содержать дисковод 827 магнитного жесткого диска для считывания с магнитного жесткого диска 839 и записи на него, дисковод 828 магнитного диска для считывания со съемного магнитного диска 829 или записи на него и дисковод 830 оптического диска, такого как ПЗУ-КД или иного оптического носителя, для считывания со съемного оптического диска 831 или записи на него. Дисковод 827 магнитного жесткого диска, дисковод 828 магнитного диска и дисковод 830 оптического диска подключаются к системной шине 823 интерфейсом 832 дисковода жесткого диска, интерфейсом 833 дисковода магнитного диска и интерфейсом 834 оптического дисковода соответственно. Дисководы и связанные с ними машинно-читаемые носители данных обеспечивают энергонезависимую память для исполняемых компьютером команд, структур данных, программных модулей и других данных для компьютера 820. Хотя описанная здесь примерная среда использует магнитный жесткий диск 839, съемный магнитный диск 829 и съемный оптический диск 831, можно использовать и другие типы машинно-читаемых носителей данных для хранения данных, в том числе магнитные кассеты, карты флэш-памяти, цифровые многоцелевые диски, картриджи Бернулли, ОЗУ, ПЗУ и т.п.
Программное кодовое средство, содержащее один или более программных модулей, в том числе операционную систему 835, одну или более прикладных программ 836, другие программные модули 837 и программные данные 838, может храниться на жестком диске 839, магнитном диске 829, оптическом диске 831, в ПЗУ 824 или ОЗУ 825. Пользователь может вводить команды и информацию в компьютер 820 через клавиатуру 840, координатное устройство 842 или иные устройства ввода (не показаны), такие как микрофон, джойстик, игровая панель, спутниковая антенна, сканер или аналогичные. Эти и другие устройства ввода часто соединяются с блоком 821 обработки через интерфейс 846 последовательного порта, связанный с системной шиной 823. Альтернативно, устройства ввода могут подключаться другими интерфейсами, такими как параллельный порт, игровой порт или универсальная последовательная шина (УПШ) (USB). Монитор 847 или иное устройство отображения также подключено к системной шине 823 через интерфейс, такой как видеоадаптер 848. В дополнение к монитору персональные компьютеры, как правило, включают в себя другие периферийные устройства вывода (не показаны), такие как громкоговорители и принтеры.
Компьютер 820 может работать в сетевой среде с помощью логических соединений с одним или более удаленными компьютерами, такими как удаленные компьютеры 849а и 849b. Каждый из удаленных компьютеров 849а и 849b может быть другим персональным компьютером, сервером, маршрутизатором, сетевым ПК, одноранговым устройством или другим общим сетевым узлом и включает в себя, как правило, многие или все из описанных выше элементов, относящихся к компьютеру 820, хотя на фиг. 8 проиллюстрированы только запоминающие устройства 850а и 850b и связанные с ними прикладные программы 836а и 836b. Логические соединения, показанные на фиг. 8, включают в себя локальную сеть (ЛС) (LAN) 851 и глобальную сеть (ГС) (WAN) 852, которые представлены здесь посредством примера, а не ограничения. Такие сетевые среды обычны в офисных или учрежденческих компьютерных сетях, интрасетях и Интернете.
При использовании в ЛС сетевой среде компьютер 820 соединяется с локальной сетью 851 через сетевой интерфейс или адаптер 853. При использовании в ГС сетевой среде компьютер 820 может включать в себя модем 854, беспроводную линию или другие средства для установления соединений по глобальной сети 852, такой как Интернет. Модем 854, который может быть внутренним или внешним, подключается к системной шине 823 через интерфейс 846 последовательного порта. В сетевой среде программные модули, показанные относящимися к компьютеру 820, или их части могут храниться в удаленном запоминающем устройстве. Понятно, что показанные сетевые соединения являются примерными и что могут использоваться и другие средства установления связи по глобальной сети 852.
Настоящее изобретение может быть выполнено в иных конкретных формах без отхода от сущности или существенных характеристик. Описанные варианты выполнения должны рассматриваться во всех аспектах только как иллюстративные, а не ограничивающие. Поэтому объем изобретения определяется приложенной формулой изобретения, а не предшествующим описанием. Все изменения, которые попадают в значения или границы эквивалентности этой формулы изобретения, должны быть включены в этот объем.