Что такое промежуточное программное обеспечение, когда на него ссылаются в контексте Ruby on Rails? - PullRequest
19 голосов
/ 10 июля 2010

Я часто слышу термин «промежуточное программное обеспечение» в контексте Ruby on Rails.Что именно это?Можете ли вы привести конкретные примеры?

Ответы [ 5 ]

33 голосов
/ 10 июля 2010

Middleware относится к Rack, стандартному Ruby API для веб-приложений. Поскольку приложения Rails в настоящее время являются приложениями Rack, они применимы к обоим.

Промежуточное программное обеспечение для стойки - это все, что находится между серверами приложений (Webrick, Thin, Unicorn, Passenger, ...) и реальным приложением, таким как приложение Rails. Это конвейер между сервером веб-приложений и самим приложением.

Входными данными для приложения Rack является «среда», которая содержит все детали HTTP-запроса (и многое другое). Результатом является HTTP-ответ. Слои промежуточного программного обеспечения подобны фильтрам , которые могут изменять вход, выход или оба. Rails использует промежуточное программное обеспечение для реализации некоторых его функций (кэширование запросов, хранилища файлов cookie, расширение метода http), но вы можете добавить свои собственные.

Промежуточное программное обеспечение Rack - это эффективный способ повторного использования простого поведения, связанного с Интернетом, в веб-приложениях, использующих Rack, независимо от базовой структуры. Если часть вашего приложения добавляет функциональность, но не отвечает за HTTP-ответ , он считается промежуточным программным обеспечением Rack.

Некоторые примеры вещей, которые вы могли бы реализовать как Промежуточное программное обеспечение для стойки :

  • HTTP-кэширование (на стороне сервера и на стороне клиента)
  • Регистрация
  • Аутентификация
  • Мониторинг
  • HTTP-фильтрация заголовков

См. Также этот вопрос SO .

3 голосов
/ 10 июля 2010

Представьте, что вы хотите создать сервис кэширования.Эта служба кэширования будет независимой от приложений, поэтому вы можете использовать ее со многими приложениями.Вы также хотели бы поддерживать множество различных веб-серверов.

Заметьте, как он находится между сервером и фреймворком?Это пример промежуточного программного обеспечения.Это не логика приложения и не очень низкоуровневая сеть, но она предоставляет услугу где-то посередине.Вот некоторые примеры: QoS (качество обслуживания), безопасность, кэширование, ...

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

Теперь это только половина проблемы, потому что есть также множество веб-фреймворков.Рельсы - это 500-фунтовая горилла, но есть и другие рамки, такие как Merb и Sinatra .Их поддержка в вашей службе кэширования - это еще одна m поддержка.Теперь вы поддерживаете nxm разных путей.Что за сопротивление.

Введите Стойка .Rack находится между фреймворками и серверами и дает вам интерфейс для кодирования вашего кеширующего сервера.Если серверы и фреймворки поддерживают стойки, а большинство из них поддерживают, ваша служба просто должна поддерживать интерфейс стоек, и вы получаете поддержку для всех фреймворков и сервисов, поддерживаемых стойкой.(Это немного похоже на латексную компиляцию в dvi и затем превращение dvi в ps, pdf, ....).Вам не нужен конвертер из Merb в WEBrick и другой из Sinata в Thin.Если ваша служба кэширования поддерживает стойки, вы изолированы от различий.

С помощью этой «узкой талии», где все m-фреймворки собираются вместе перед разветвлением на n-серверы между приложением и сервером, вы также можете увидеть, как это обеспечивает хорошее место для добавления таких функций, как маршрутизация, ведение журналастатическое обслуживание, которое обходит медлительность вашей интерпретируемой структуры и т. д.

1 голос
/ 27 июня 2017

Объяснение 4-летнему:

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

Но чаще всего вы не обнаружите, что изменения в сообщении происходят каконо проходит через цепь, пока не достигнет конечной точки.Например:

  1. Автор : «Вы всегда будете помнить это как день, когда вы почти поймали капитана Джека Воробья».
  2. Персона 1 - проходит:«Вы всегда будете помнить день, когда вы почти поймали капитана Джека Воробья».
  3. Человек 2 - проходит: «Вы всегда будете помнить день, когда вы почти поймали капитана Джека Воробья».
  4. Человек 3 - передает: «Вы будете помнить день, когда вы поймали капитана Джека Воробья».
  5. Человек 4 - передает: «Вы будете помнить капитана Джека Воробья».
  6. ФиналПолученное сообщение : «Помните»

Промежуточное ПО - это, по сути, люди между вами, автор сообщения и последнее полученное сообщение: обратите внимание, как они могут изменить или отфильтровать сообщение.?Это своего рода промежуточное программное обеспечение в двух словах.Конечно, анология напряжена, но, надеюсь, это даст вам основу для понимания более технических ответов выше.

1 голос
/ 10 июля 2010

Промежуточное программное обеспечение Rails позволяет вам перехватить запрос или ответ до того, как он достигнет Rails, и изменить его.(Вы находитесь в среднем между стойкой и рельсами).Например, вы можете взять каждый ответ, который возвращает mime-тип «image / png», и добавить к нему водяной знак, прежде чем позволить ему перейти на стойку для подачи.Или вы можете отфильтровать запросы, которые вам не нравятся по какой-либо причине (неавторизованные, не имеют заголовка), и никогда не позволять им попадать на рельсы вообще.Или вы можете добавить заголовок к входящему запросу перед передачей его на рельсы.Или вы можете получить ответ от rails, и если это "text / html", вы можете сжать html (удалить пробелы и т. Д.), Прежде чем перейти к выводу.(Я экспериментировал с ним в http://github.com/maxim/html_press)

. Этих маленьких приложений достаточно, и они подключены как «промежуточное ПО».

0 голосов
/ 10 июля 2010

Взглянув на CodeRack , можно понять, каковы некоторые из возможностей.Теперь, когда вы спрашиваете, что часто слышите об этом в контексте Ruby on Rails, вы спрашиваете в целом, что такое промежуточное ПО?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...