Websh a été initialement développé par Netcetera AG, en Suisse, et a été apporté à l'Apache Software Foundation en 2001.
La version la plus récente est Websh 3.6.0b5 (2009-09-14)
Malheureusement, Apache « a interrompu le support et le développement de Websh par manque de ressources ».
Tcl est un bon langage de programmation dans le sens où il représente le programme comme une liste de commandes, ce qui est similaire à notre langage naturel.
Tcl est également puissant avec de nombreux concepts de programmation « sophistiqués » disponibles dès le plus jeune âge.
L'idée d'utiliser Tcl pour la programmation web est naturelle. Websh fait partie de ces efforts.
Websh peut être utilisé de l'une des 4 manières suivantes :
Bien que Websh soit initialement conçu pour le Web, j'ai trouvé qu'il était également utile de l'utiliser ailleurs.
Le concept clé ici est "commande", tout comme celui du Tool Command Language (Tcl).
Un script Websh hello world ressemble à ci-dessous. web::command
et web::dispatch
sont les deux commandes principales.
web::command hello {
web::put " hello "
}
web::command world {
web::put " world "
}
web::dispatch
Websh est une pure extension Tcl. Le processus de construction est similaire avec
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 créera trois cibles : websh3.6., qui est l'application Websh autonome (liée dynamiquement à Tcl et libwebsh3.6..so) et libwebsh3.6..so, qui est un objet partagé conforme à TEA (Tcl Extension Architecture). qui peut être chargé dynamiquement depuis Tcl en utilisant [load libwebsh3.6..so]. Les deux fournissent le package Tcl websh. La troisième cible est mod_websh3.6..so (également liée dynamiquement à Tcl et libwebsh3.6..so), qui est le module Websh Apache.
Les applications Websh peuvent s'exécuter en mode CGI ou via mod_websh
.
LoadModule websh_module /path/to/mod_websh.so
< IfModule websh_module>
WebshConfig /path/to/websh.conf
AddHandler websh .wsh
IfModule >
Avec mod_websh, l'interpréteur Tcl peut être réutilisé entre chaque requête.
Cette fonctionnalité peut augmenter considérablement le temps de réponse des 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
Étant donné que l'interpréteur peut être réutilisé, nous avons besoin d'une configuration au début une fois et d'un nettoyage à la fin.
# ----------------------------------------------------#
# 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