Что такое промежуточное программное обеспечение при ссылке в контексте Ruby on Rails?
Я часто слышу термин "промежуточное ПО" в контексте Ruby on Rails. Что это такое? Можете ли вы привести конкретные примеры?
Ответы
Ответ 1
Middleware относится к Rack, стандартным API Ruby для веб-приложений. Поскольку Rails-приложения являются приложениями Rack в наши дни, они применяются к обоим.
Средство промежуточного уровня стойки - это все между серверами приложений (Webrick, Thin, Unicorn, Passenger,...) и фактическим приложением, например, вашим Rails-приложением. Это конвейер между сервером веб-приложений и самим приложением.
Вход в приложение Rack - это "среда", которая содержит все детали запроса HTTP (и многое другое). Вывод - ответ HTTP. Уровни промежуточного ПО похожи на фильтры, которые могут изменять вход, выход или и то, и другое. Rails использует промежуточное программное обеспечение для реализовать некоторые из его функций (кеширование запросов, хранилища файлов cookie, расширение метода http), но вы можете добавить свои собственные.
Средство промежуточного уровня - эффективный способ повторного использования поведения, связанного с веб-сайтом, в веб-приложениях, использующих Rack, независимо от базовой структуры. Если часть вашего приложения добавляет функциональность, но не отвечает за HTTP-ответ, он квалифицируется как промежуточное ПО Rack.
Некоторые примеры вещей, которые вы могли бы реализовать в качестве Средство промежуточного уровня стойки:
- HTTP-кеширование (сторона сервера и клиентская сторона)
- Вход
- Аутентификация
- Мониторинг
- Фильтрация заголовков HTTP
См. также этот вопрос SO.
Ответ 2
Представьте, что вы хотите создать службу кеширования. Эта служба кэширования была бы аппроксимирующей, поэтому вы могли бы использовать ее со многими приложениями. Вы также хотели бы поддерживать множество разных веб-серверов.
Обратите внимание, как он сидит посередине между сервером и каркасом? Это пример промежуточного программного обеспечения. Это не прикладная логика и не совсем низкоуровневая сетевая среда, но обеспечивает сервис где-то посередине. Некоторые примеры: QoS (качество обслуживания), безопасность, кэширование,...
Было бы неплохо, если бы ваша служба поддерживала все n популярных (и некоторых из не очень популярных) серверов (тонких, webrick). Если вы поддерживали их, все больше людей могли бы использовать ваше замечательное программное обеспечение. Вы могли видеть, что это произойдет, это будет реальное перетаскивание, вам нужно будет поддерживать каждый сервер специальным кодом, специфичным для сервера.
Теперь это всего лишь половина проблемы, потому что существует множество веб-фреймворков. Rails - это горилла с 500 фунтами, но есть и другие рамки, такие как Merb и Sinatra. Поддержка этих функций в вашем кешировании - это еще одна разновидность поддержки. Теперь вы поддерживаете n x m разные пути. Какое сопротивление.
Введите Rack. Стойка находится между фреймворками и серверами и дает вам интерфейс для кодирования вашего сервера кеширования. Если серверы и фреймворки поддерживают стойку, и большинство из них, ваша служба просто нуждается в поддержке интерфейса стойки, и вы получаете поддержку для всех фреймворков и сервисов. (Это немного похоже на сборку латекса на dvi, а затем превращение dvi в ps, pdf,...). Вам не нужен конвертер от Merb до WEBrick, а другой от Sinata to Thin. Если ваша служба кеширования поддерживает стойку, вы изолированы от различий.
С этой "узкой талией", где m-frameworks все объединяются до перехода на n-серверы между приложением и сервером, вы также можете увидеть, как он обеспечивает хорошее место для добавления таких функций, как маршрутизация, ведение журнала, статическая работа что обходит медленность вашего интерпретируемого фрейма и т.д.
Ответ 3
Rails промежуточное программное обеспечение позволяет вам уловить запрос или ответ, прежде чем он достигнет Rails, и изменить его. (Вы находитесь в середине между Rack и Rails). Например, вы можете принять каждый ответ, который возвращает тип mime-образа "image/png", и добавить к нему водяной знак, прежде чем позволить ему перейти на стойку для обслуживания. Или вы можете отфильтровать запросы, которые вам не нравятся по какой-либо причине (несанкционированные, не имеют заголовка) и никогда не позволять им ударять по рельсам вообще. Или вы можете добавить заголовок к входящему запросу, прежде чем передавать его на рельсы. Или вы можете взять ответ, исходящий из рельсов, и если он "text/html", вы можете сжать html (удалить пробелы и т.д.), Прежде чем перейти к выводу. (Я экспериментировал с ним в http://github.com/maxim/html_press)
Эти маленькие приложения много и подключены к ним как "промежуточное ПО".
Ответ 4
Взглянув на CodeRack, вы можете понять, каковы некоторые из возможностей. Теперь, когда вы просите, чтобы вы часто слышали об этом в контексте Ruby on Rails, вы чаще спрашиваете, что такое промежуточное ПО?
Ответ 5
Я возьму другой подход, чтобы он, надеюсь, был бы понятен даже для 4-летнего:
Простое объяснение: без каких-либо технических:
Помните ли вы игру: "Chinese whispers" , которую вы играли в детстве? (не было никакого расизма - на самом деле это была игра в мой день). Вы хотите рассказать своему другу, который сидит на другом конце линии, специальное сообщение. но вы не можете сказать ему прямо: вы должны передать свое сообщение от человека к человеку, пока он наконец не достигнет его или нее.
Но чаще всего вы не обнаружите, что изменения в сообщении происходят, когда он проходит цепочку, пока не достигнет конечной точки. Например:
- Оригинатор: "Ты всегда помнишь это как день, когда ты почти поймал капитана Джека Воробья".
- Лицо 1 - переходит на: "Вы всегда будете помнить тот день, когда вы почти поймали капитана Джека Воробья".
- Лицо 2 - проходит: "Вы всегда будете помнить тот день, когда вы почти поймали капитана Джека Воробья".
- Лицо 3 - проходит: "Вы вспомните тот день, когда вы поймали капитана Джека Воробья".
- Лицо 4 - переходит: "Вы помните капитана Джека Воробья".
- Полученное окончательное сообщение: "Запомнить"
Middleware - это в основном люди, находящиеся между вами, составитель сообщения и окончательное сообщение, которое было получено: обратите внимание, как они могут изменять или фильтровать сообщение? Это что-то вроде промежуточного программного обеспечения в двух словах. Конечно, анология напряженная, но, надеюсь, это даст вам основу для понимания более технических ответов выше.
Надеюсь, это поможет вам.