Websh fue desarrollado originalmente por Netcetera AG, Suiza y contribuyó a la Apache Software Foundation en 2001.
La versión más reciente es Websh 3.6.0b5 (2009-09-14)
Desafortunadamente, Apache "descontinuó el soporte y desarrollo de Websh por falta de recursos".
Tcl es un buen lenguaje de programación en el sentido de que representa el programa como una lista de comandos, lo cual es similar a nuestro lenguaje natural.
Tcl también es poderoso con muchos conceptos de programación "elegantes" disponibles desde los primeros días.
La idea de utilizar Tcl para la programación web es natural. Websh es uno de esos esfuerzos.
Websh se puede utilizar de una de las siguientes cuatro formas:
Aunque Websh está diseñado originalmente para la web, encontré que también es útil usarlo en otros lugares.
El concepto clave aquí es "comando", como el del lenguaje de comandos de herramientas (Tcl).
Un script Websh de Hola mundo se ve a continuación. web::command
y web::dispatch
son los dos comandos principales.
web::command hello {
web::put " hello "
}
web::command world {
web::put " world "
}
web::dispatch
Websh es una extensión Tcl pura. El proceso de construcción es similar con
cd src/unix
autoconf
./configure
--with-tclinclude=/usr/include/tcl
--with-httpdinclude=/usr/include/apache2
--enable-threads
make
make test
make apachetest
make install
Make creará tres objetivos: websh3.6., que es la aplicación Websh independiente (vinculada dinámicamente a Tcl y libwebsh3.6..so) y libwebsh3.6..so, que es un objeto compartido compatible con TEA (Tcl Extension Architecture). que se puede cargar dinámicamente desde Tcl usando [load libwebsh3.6..so]. Ambos proporcionan el paquete Tcl websh. El tercer objetivo es mod_websh3.6..so (también vinculado dinámicamente a Tcl y libwebsh3.6..so), que es el módulo Websh Apache.
Las aplicaciones Websh pueden ejecutarse en modo CGI o mediante mod_websh
.
LoadModule websh_module /path/to/mod_websh.so
< IfModule websh_module>
WebshConfig /path/to/websh.conf
AddHandler websh .wsh
IfModule >
Con mod_websh, el intérprete Tcl se puede reutilizar entre cada solicitud.
Esta característica puede aumentar considerablemente el tiempo de respuesta de los scripts web.
set classid [web::interpclasscfg]
web::interpclasscfg $classid maxrequests 100 ; # handle at most 100 request
web::interpclasscfg $classid maxttl 600 ; # live at most 600 seconds
web::interpclasscfg $classid maxidletime 180 ; # idle at most 180 seconds
Dado que el intérprete se puede reutilizar, es necesario configurarlo al principio una vez y limpiarlo al final.
# ----------------------------------------------------#
# web::initializer will execute in listed order #
# ----------------------------------------------------#
web::initializer {
web::logdest add user.-debug file -unbuffered /tmp/test.log
web::logfilter add *.-debug
web::log info " initializing interp "
}
# ----------------------------------------------------#
# web::finalizer will be executed in reverse order #
# ----------------------------------------------------#
web::finalizer {
web::log info " start shutting down interp "
}
web::finalizer {
web::log info " just before shutting down interp "
}
# ----------------------------------------------------#
# web::command will be dispatched from web::dispatch #
# ----------------------------------------------------#
web::command default {
web::put " hello "
web::putx /path/to/page.html
}
web::dispatch