WEBrick
Оригинальный автор(ы) | Масаёши Такахаши, Юзо Гото и др. [1] [2] |
---|---|
Разработчик(и) | Рубиновое сообщество |
Стабильная версия | 1.8.1 [3]
/ 27 января 2023 г |
Репозиторий | |
Написано в | Руби |
Операционная система | Кросс-платформенный |
Доступно в | Руби |
Тип | Веб-сервер |
Лицензия | Лицензия BSD из 2 пунктов |
Веб-сайт | www |
WEBrick — это библиотека Ruby, предоставляющая простые HTTP веб-серверы . Он использует базовую аутентификацию доступа и дайджест-аутентификацию доступа для различных типов серверов , которые он может создавать: сервер на основе HTTP , сервер HTTPS , прокси-сервер и сервер виртуального хоста . [4] создание нескольких серверов, отличных от HTTP, таких как сервер дневного времени, который использует протокол дневного времени, WEBrick также облегчает а не HTTP. Он используется платформами Ruby on Rails и Padrino для тестирования приложений в среде разработки , а также в производственном режиме для небольших нагрузок. Теперь это часть стандартной библиотеки Ruby. [1]
WEBrick следует модели распространения с открытым исходным кодом .
История
[ редактировать ]WEBrick возник на основе идеи, изложенной в статье «Интернет-программирование с помощью Ruby» в японском инженерном журнале Open Design. Первоначально он был разработан как набор инструментов для разработки HTTP-серверов с использованием Ruby. Благодаря характеру модели с открытым исходным кодом и вкладу нескольких разработчиков Ruby со всего мира, WEBrick был значительно расширен и в конечном итоге был включен в стандартную библиотеку Ruby 1.8.0. [2] Обработчик ERB WEBrick и прокси-сервер WEBrick были впервые представлены в Ruby 1.9.3, а виртуальный хост WEBrick был включен в Ruby 2.0.0.
Использование
[ редактировать ]Сервер WEBrick понимает только язык сервлетов . Он использует несколько независимых сервлетов, объединенных программистом, для обработки CGI сценариев , страниц ERB , блоков Ruby и списков каталогов для предоставления веб-приложения или для обслуживания URI запроса для каждого хоста или для каждого пути. Например, HTTPServlet::FileHandler , [2] HTTPServlet::ProcHandler , [2] HTTPServlet::CGIHandler , [2] HTTPServlet::ERBHandler [2] являются примерами стандартных сервлетов, поставляемых с WEBrick.
WEBrick включен в Ruby и, следовательно, доступен пользователю без дополнительной оплаты. WEBrick полностью написан на Ruby и поддерживает несколько стандартов, таких как HTTP, HTML и даже RHTML . На этапе разработки нет необходимости устанавливать отдельный веб-сервер, поскольку WEBrick уже встроен в платформу Rails. Это веб-сервер по умолчанию, когда приложение Ruby развертывается без какого-либо файла procfile на Rails. Более того, поскольку он полностью реализован на Ruby, из WEBrick можно осуществлять прямые вызовы к приложению Rails. В целом, он обеспечивает надежный вариант с низкой конфигурацией для тестирования в процессе разработки.
Создание экземпляров серверов
[ редактировать ]Создание экземпляра HTTP-сервера
[ редактировать ]Следующие команды используются для запуска HTTP-сервера на необходимом порту. [1]
# Include WEBrick class with require
require 'webrick'
# FileHandler servlet provides the option to choose which files from user to serve
# The following code shows how to serve them from the folder 'myapp'
root = File.expand_path '/var/myapp/'
# Instantiating a new server with HTTPServer.new on port 1234 serving the documents from root folder
server = WEBrick::HTTPServer.new :Port => 1234, :DocumentRoot => root
# The following proc is used to customize the server operations
server.mount_proc '/' do |request, response|
response.body = 'Hello, world!'
end
# The following command will provide a hook to shut down the server (often done with Ctrl+C)
trap('INT') {server.shutdown}
# Start the server
server.start
Сервлеты могут быть смонтированы для обеспечения расширенного пользовательского поведения по сравнению с процедурой. [5] для увеличения модульности .
Запуск виртуального хоста
[ редактировать ]WEBrick создает порт прослушивания. Одновременно могут быть созданы и другие порты в качестве «виртуальных хостов», которые не прослушиваются, как показано ниже: [1]
#Creating a virtual host that doesn't listen
vhost = WEBrick::HTTPServer.new :ServerName => 'vhost.example',
:DoNotListen => true, # ...
# Mounting the virtual host created above similar to the way HTTP server was mounted
vhost.mount '/', ...
# This host, when mounted to the listening server host, will now act as a virtual host
server.virtual_host vhost
:DocumentRoot должен быть предоставлен или экземпляр сервлета должен быть настроен для обслуживания URI запроса ; в противном случае ошибка 404 будет возвращена .
Создание экземпляра HTTPS-сервера
[ редактировать ]Просто включив SSL и указав имя сертификата SSL, сервер HTTPS можно запустить с самозаверяющим сертификатом , который меняется при каждом перезапуске сервера. [1]
# In addition to webrick, we will require webrick/https too for SSL functionalities
require 'webrick'
require 'webrick/https'
# Providing certificate name. This, however, will be a self-generated self-signed certificate
cert_name = [%w[CN localhost],]
# Enabling SSL and providing the certificate name will instantiate HTTPS server
server = WEBrick::HTTPServer.new(:Port => 1234,
:SSLEnable => true,
:SSLCertName => cert_name)
Однако для создания экземпляра HTTPS-сервера также можно предоставить заранее определенный ключ и сертификат, как показано ниже:
# In addition to the above two, we'll need openssl to read SSL certificates and keys
require 'openssl'
# Read the saved certificate and its signature key from the local directory
cert = OpenSSL::X509::Certificate.new File.read '/var/myapp/cert.pem'
pkey = OpenSSL::PKey::RSA.new File.read '/var/myapp/pkey.pem'
# Pass the certificate and the key as separate parameters while instantiating with HTTPServer.new
server = WEBrick::HTTPServer.new(:Port => 1234,
:SSLEnable => true,
:SSLCertificate => cert,
:SSLPrivateKey => pkey)
Запуск прокси-сервера
[ редактировать ]WEBrick также может проксировать запросы GET, HEAD и POST : [1]
# Instantiating a proxy server is similar, except that it is handled by HTTPProxyServer servlet
require 'webrick/httpproxy'
proxy = WEBrick::HTTPProxyServer.new :Port => 1234
# Providing the hook out from the current thread
trap 'INT' do proxy.shutdown end
Ограничения
[ редактировать ]В отличие от большинства серверов, используемых в производстве, WEBrick не масштабируется, поскольку по умолчанию это однопоточный веб-сервер. [6] Следовательно, несколько запросов одновременно не могут быть обработаны, и последующим запросам придется ждать, пока не будут обработаны все предыдущие запросы, что приведет к большой задержке. Следовательно, разработчики предпочитают другие многопоточные полноценные веб-серверы, такие как Lighttpd и Mongrel, для развертывания своих Rails . приложений [7]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с д и ж «Модуль: WEBrick (Ruby 2.3.1)» . Ruby-doc.org . Проверено 22 сентября 2016 г.
- ^ Jump up to: а б с д и ж Руководство Gnome по WEBrick
- ^ «Выпуск 1.8.1» . 27 января 2023 г. Проверено 8 февраля 2023 г.
- ^ Исследование влияния веб-серверов на энергопотребление веб-приложений - IEEE.
- ^ процесс
- ^ Веб-сервер Heroku Ruby по умолчанию.
- ^ NetBeans Ruby и Rails IDE с JRuby (FirstPress), Крис Катлер, Брайан Леонард