Websh awalnya dikembangkan oleh Netcetera AG, Swiss dan disumbangkan ke Apache Software Foundation pada tahun 2001.
Versi terbaru adalah Websh 3.6.0b5 (14-09-2009)
Sayangnya, Apache "menghentikan dukungan dan pengembangan Websh karena kurangnya sumber daya."
Tcl adalah bahasa pemrograman yang baik dalam arti mewakili program sebagai daftar perintah, yang mirip dengan bahasa alami kita.
Tcl juga kuat dengan banyak konsep pemrograman "mewah" yang tersedia mulai dari awal.
Ide menggunakan Tcl untuk pemrograman web adalah hal yang wajar. Websh adalah salah satu upaya tersebut.
Websh dapat digunakan dengan salah satu dari 4 cara di bawah ini:
Meskipun Websh awalnya dirancang untuk web, menurut saya berguna juga untuk menggunakannya di tempat lain.
Konsep kuncinya di sini adalah "perintah", seperti yang ada di Tool Command Language (Tcl).
Skrip Websh hello world terlihat seperti di bawah ini. web::command
dan web::dispatch
adalah dua perintah utama.
web::command hello {
web::put " hello "
}
web::command world {
web::put " world "
}
web::dispatch
Websh adalah ekstensi Tcl murni. Proses pembuatannya mirip dengan
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 akan membuat tiga target: websh3.6., yang merupakan aplikasi Websh mandiri (terhubung secara dinamis ke Tcl dan libwebsh3.6..so) dan libwebsh3.6..so, yang merupakan objek bersama yang sesuai dengan TEA (Tcl Extension Architecture) yang dapat dimuat secara dinamis dari dalam Tcl menggunakan [load libwebsh3.6..so]. Keduanya menyediakan paket Tcl websh. Target ketiga adalah mod_websh3.6..so (juga terhubung secara dinamis ke Tcl dan libwebsh3.6..so), yang merupakan modul Websh Apache.
Aplikasi websh dapat berjalan dalam mode CGI atau melalui mod_websh
.
LoadModule websh_module /path/to/mod_websh.so
< IfModule websh_module>
WebshConfig /path/to/websh.conf
AddHandler websh .wsh
IfModule >
Dengan mod_websh, juru bahasa Tcl dapat digunakan kembali di antara setiap permintaan.
Fitur ini dapat memberikan peningkatan besar pada waktu respons skrip 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
Karena interpreter dapat digunakan kembali, kita memerlukan pengaturan di awal dan pembersihan di akhir.
# ----------------------------------------------------#
# 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