WEBrick
WEBrick es una biblioteca Ruby que proporciona servidores web HTTP simples. Utiliza autenticación de acceso básico y autenticación de acceso implícito para diferentes tipos de servidores que puede crear: servidor basado en HTTP, servidor HTTPS, servidor proxy y servidor de host virtual. WEBrick también facilita la construcción de varios servidores que no son HTTP, como el servidor diurno que utiliza el protocolo diurno en lugar de HTTP. Los frameworks Ruby on Rails y Padrino lo utilizan para probar aplicaciones en un entorno de desarrollo, así como en modo de producción para cargas pequeñas. Ahora forma parte de la biblioteca estándar de Ruby.
WEBrick sigue el modelo de distribución de código abierto.
Historia
WEBrick se originó a partir de una idea contenida en un artículo titulado "Programación de Internet con Ruby" en Open Design, una revista japonesa de ingeniería. Inicialmente se desarrolló como un conjunto de herramientas para el desarrollo de servidores HTTP utilizando Ruby. Debido a la naturaleza del modelo de código abierto y las contribuciones de varios desarrolladores de Ruby en todo el mundo, WEBrick se amplió enormemente y finalmente se incluyó como una biblioteca estándar desde Ruby 1.8.0. WEBrick ERB Handler y WEBrick Proxy Server se introdujeron por primera vez en Ruby 1.9.3, mientras que WEBrick Virtual Host se incluyó en Ruby 2.0.0.
Uso
Un servidor WEBrick sólo entiende el lenguaje de los servlets. Utiliza múltiples servlets independientes, unidos por el programador, para manejar scripts CGI, páginas ERB, bloques Ruby y listados de directorios para proporcionar una aplicación web o atender una URI de solicitud por host o por ruta. Por ejemplo, HTTPServlet::FileHandler, HTTPServlet::ProcHandler, HTTPServlet::CGIHandler, HTTPServlet::ERBHandler son ejemplos de los servlets estándar que viene con WEBrick.
WEBrick está incluido en Ruby y, por lo tanto, está disponible para el usuario sin costo adicional. WEBrick ha sido escrito completamente en Ruby y soporta varios estándares como HTTP, HTML e incluso RHTML. Durante la etapa de desarrollo, no es necesario instalar un servidor web discreto ya que WEBrick ya está integrado en el marco Rails. Es el servidor web predeterminado cuando la aplicación Ruby se implementa sin ningún archivo de perfil en Rails. Además, dado que se implementó íntegramente en Ruby, se pueden realizar llamadas directas desde WEBrick a la aplicación Rails. En general, proporciona una opción confiable y de baja configuración para pruebas en desarrollo.
Creación de instancias de servidores
Crear una instancia de un servidor HTTP
Los siguientes comandos se utilizan para iniciar un servidor HTTP en el puerto requerido.
# Include WEBrick class with requirenecesidad 'webrick '# FileHandler servlet ofrece la opción de elegir qué archivos de usuario para servir# El siguiente código muestra cómo servirlos de la carpeta 'myapp 'root = Archivo.expand_path '/var/myapp/ '# Instantáneando un nuevo servidor con HTTPServer.new en el puerto 1234 sirviendo los documentos de la carpeta raízservidor = WEBrick::HTTPServer.nuevo :Port = 1234, : DocumentRoot = root# El siguiente proc se utiliza para personalizar las operaciones del servidorservidor.mount_proc '/ ' do Silenciosolicitud, respuestaSilencio respuesta.cuerpo = ¡Hola, mundo! 'final# El siguiente comando proporcionará un gancho para apagar el servidor (a menudo hecho con Ctrl+C)trampa()NO ') {}servidor.apagado}# Iniciar el servidorservidor.Empieza
Los servlets se pueden montar para proporcionar un comportamiento personalizado avanzado en comparación con un proceso, para aumentar la modularidad.
Iniciar un host virtual
WEBrick crea un puerto de escucha. También se pueden crear al mismo tiempo varios otros puertos como "hosts virtuales" que no escuchan, como se muestra a continuación:
#Crear un host virtual que no escuchavhost = WEBrick::HTTPServer.nuevo :ServerName = 'vhost.example ', No, no. = verdadero, #...# Montaje del host virtual creado anteriormente similar a la forma en que se monta el servidor HTTPvhost.montaje '/ ', ...# Este host, cuando se monta en el host del servidor de escucha, actuará ahora como un host virtualservidor.virtual_host vhost
:Se debe proporcionar DocumentRoot o se debe configurar una instancia de un servlet para atender un URI de solicitud; de lo contrario, se devolverá un error 404.
Crear una instancia de un servidor HTTPS
Simplemente habilitando SSL y proporcionando un nombre de certificado SSL, se puede iniciar un servidor HTTPS con un certificado autofirmado que cambia con cada reinicio del servidor.
# Además de webrick, necesitaremos webrick/https también para funcionalidades SSLnecesidad 'webrick 'necesidad 'webrick/https '# Proporcionándole el nombre del certificado. Este, sin embargo, será un certificado auto-firmado autogeneradocert_name = [%w[CN localhost],]# Enabling SSL and providing the certificate name will instantiate HTTPS serverservidor = WEBrick::HTTPServer.nuevo():Port = 1234, : = verdadero, :SSLCertName = cert_name)
Sin embargo, también se puede proporcionar una clave y un certificado predeterminados para instantánear HTTPS Server como se muestra a continuación:
# Además de los dos anteriores, necesitaremos apertura para leer certificados y claves SSLnecesidad 'openssl '# Lea el certificado guardado y su clave de firma del directorio localcert = OpenSSL::X509::Certificado.nuevo Archivo.leído '/var/myapp/cert.pem 'Pkey = OpenSSL::PKey::RSA.nuevo Archivo.leído '/var/myapp/pkey.pem '# Pase el certificado y la clave como parámetros separados mientras se instantánea con HTTPServer.newservidor = WEBrick::HTTPServer.nuevo():Port = 1234, : = verdadero, :SSLCertificate = cert, :SSLPrivate Clave = Pkey)
Iniciar un servidor proxy
WEBrick también puede enviar solicitudes GET, HEAD y POST:
# Instantánear un servidor proxy es similar, excepto que es manejado por HTTPProxyServer servletnecesidad 'webrick/httpproxy 'proxy = WEBrick::HTTPProxyServer.nuevo :Port = 1234# Proporcionando el gancho del hilo actualtrampa NO ' do proxy.apagado final
Limitaciones
A diferencia de la mayoría de los servidores que se utilizan en producción, WEBrick no es escalable ya que es un servidor web de un solo subproceso por defecto. Por lo tanto, no se pueden manejar varias solicitudes al mismo tiempo y las solicitudes posteriores tendrían que esperar hasta que se hayan manejado todas las solicitudes anteriores, lo que genera un gran retraso. Por lo tanto, los desarrolladores prefieren otros servidores web completos y multiproceso como Lighttpd y Mongrel para implementar sus aplicaciones Rails.
Contenido relacionado
Spl (Unix)
PERLA (lenguaje de programación)
Tabla de métodos virtuales
Datosflex
Hacer bucle while