WDScript v2.5.0 en préparation, nouveauté : Le mode FastCGI

Ce nouveau mode d'exécution est maintenant pris en charge dans les nouvelles versions de WDScript. (depuis v2.4.8)

UPDATE 21 Jan. : WDScript 2.4.9 WD15 : Le mode FastCGI est Compatible IIS 7.5 ! ainsi que Apache 2.2 et Lighttpd Windows et Linux
UPDATE 15 Jan. : Sources WDScript 2.4.8 WD15 avec Librairies Fast CGI dispo (1ere préversion 2.5.0)
Lien vers les téléchargements sur sf.net : http://sourceforge.net/projects/wdscript/files/

Le mode FastCGI est à mi-chemin entre le CGI (Process qui effectue un traitement unique) et un mode Client/Serveur où le serveur
serait l'application WDScript.

Je cherchais à obtenir ce mode Client/Serveur via un module PHP fait par mes soins (en Delphi) mais cela n'a jamais été parfait, car je cherchais
à faire du Multithread directement en Windev sur un projet migré depuis Windev 5.5...

Avantages
Le mode FastCGI, très similaire au mode CGI utilisé jusqu'à présent par WDScript va apporter des nouveautés intérressantes :

- Une réduction du temps de chargement à chaque appel à WDScript : par exemple la fonction Compile() charge toutes les DLL présentes dans le répertoire de l'exécutable et prend plus de 70% du temps de compilation de la page sur mon poste de travail (Core 2 Duo sous Seven x64)
- La possibilité de conserver en mémoire une partie des informations (Préférences d'un projet, Messages traduits, et éventuellement des informations de session)
- La possibilité de ne conserver qu'une seule connexion à une base de données, ou une seule par Process d'exécution simultané ...
- La possibilité d'afficher en temps réel ce que traite wdscript
- Un paramètrage des processus dans le fichier de configuration Apache

mod_fcgid
Apache propose donc une extension nommée mod_fcgid (non incluse de base) mais disponible sur leur site :
http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html

Elle se configure ainsi dans le fichier httpd.conf :

####################
# Apache FCGID (Fast CGI)
 
LoadModule fcgid_module modules/mod_fcgid.so
 
<IfModule fcgid_module>
 
  AddHandler fcgid-script .wss 
  AddHandler fcgid-script .wsb
  
  AddHandler fcgid-script .wsp .wpm .wpp
  
  AddHandler fcgid-script .wdsc .wdsb .ws .wdb .wdsp
 
# Scripts Files :
  FcgidWrapper "W:/bin/wdscript/wdscript-fcgi.exe" .wss
  FcgidWrapper "W:/bin/wdscript/wdscript-fcgi.exe" .wsb
 
# Protected Files :
  FcgidWrapper "W:/bin/wdscript/wdscript-fcgi.exe" .wsp
  FcgidWrapper "W:/bin/wdscript/wdscript-fcgi.exe" .wpm
  FcgidWrapper "W:/bin/wdscript/wdscript-fcgi.exe" .wpp
  
  FcgidCmdOptions "W:/bin/wdscript/wdscript-fcgi.exe" \
                  InitialEnv MAX_REQUESTS=2000 \
                  MaxRequestsPerProcess 2000 \
                  IOTimeout 30
                  
  FcgidInitialEnv FCGI_WEB_SERVER_ADDRS=localhost
  FcgidPassHeader HTTP_AUTHORIZATION
  FcgidProcessLifeTime 180
  FcgidIdleTimeout 120
  
  # FastCGI application processes will be terminated after handling the specified number of requests. A value of 0 disables the check.
  FcgidMaxRequestsPerProcess 100
  
  FcgidMinProcessesPerClass 3
  FcgidMaxProcesses 200
 
</IfModule> 

Lighttpd
Lighttpd dispose de cette extension en standard, je l'utilise par exemple sur ce site (dedibox) avec PHP...

wash_fastcgi_wdl248.png

libFCGI
libfcgi, issue du site officiel www.fastcgi.com, cette petite DLL de 48ko qui permet de se connecter au gestionnaire de processus contenu dans le module apache officiel (via les Named Pipes). Elle permet aussi un mode multi-thread, ce qui est rassurant pour la suite... Cela permettrait éventuellement un multithread d'exécution directement dans une seule instance de WDScript...

C'est ce site, bien documenté, qui m'a donné l'envie d'implémenter le protocole dans wdscript. Mais il m'a bien fait perdre une journée avec son propre module apache "mod_fastcgi" que je n'ai pas réussi à corriger pour permettre une communication entre les processus ( http://www.fastcgi.com/dist/ )
Il proposait en plus la communication par Sockets, ce que semble éviter mod_fcgid...

Quoiqu'il en soit, l'API libfcgi gére ces deux modes plus quelques autres en assynchrone... Ca nous laisse des possibilités en cas de problème...

A Suivre...
Bien, vous voilà au courant de mes avancées sur WDScript 15, ... il y a encore bien d'autres nouveautés à intégrer pour optimiser les traitements, car je conservais au maximum la compatibilité du code avec les vielles versions de Windev... Mais le support Linux est arrivé... et il est temps de tout améliorer :)

Easy Web Server 3.0.0 sera aussi bientot disponible, préconfiguré pour cet environnement avec quelques nouveautés :
- Une nouvelle fenetre de surveillance des Logs qui affiche en temps réel les acces au site ou les erreurs rencontrées
- MySQL 5.1 préconfiguré en InnoDB et UTF8 pour le support des relations d'intégrité,
- PHP 5.2.12 (j'évite de diffuser la 5.3 pour le moment, meme si elle est déjà "dans les cartons")
Ainsi que les extensions Eaccelerator et XDebug (qui affiche la pile d'exécution en cas de problemes),
et toujours l'extension php_wdscript qui sera améliorée sous peu grâce à mon travail sur FastCGI...
- Perl 5.10 préconfiguré mais inclus sans ses librairies perl...
- Toujours SQLiteManager, revu récemment, et de plus en plus utile...

Plus en profondeur, le mode service a été amélioré, ainsi que la gestion de l'environnement, ce qui permet de ne pas dupliquer certaines DLL dans les répertoires d'apache, mysql et php...

Ressources :
FastCGI WebSite : http://www.fastcgi.com
Lighttpd Mod FastCGI : http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI
FastCGI 1.5 WhitePaper (IIS) : http://www.coastrd.com/fcgi-white-paper
libfcgi2 API (IIS) non opensource : http://www.coastrd.com/fastcgi
Configurer FastCGI sous IIS 7.0 : http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/
FastCGI 1.5 pour IIS 5.1 et 6.0 : http://www.iis.net/expand/fastcgi (sortie le 18 jan 2010)

v2.5.0 (en cours) - WD15 039g
 ! Résolution du probleme des procédures WL surchargées en WDScript (Erreur/Info etc), ajout fTaille/fSize
 + Intégration de SQLite4WD 3.6.0.5 (SQLite v3.6.18), voir exemples
 + Ajout de tableaux associatifs accessibles via CGI:REQUEST, CGI:POST, CGI:GET, CGI:COOKIE (équivalent PHP)
 + Affichage de numéros de ligne réels dans le fichier source en cas d'erreur
 + Compression GZIP possible en mode FastCGI (plus lent mais utile aux petites connexions internet)
   Les anciens tableaux statiques internes existent toujours, mais pourraient disparaitre dans une future version majeure
 o Optimisation des fonctions wdscript grace à ces tableaux associatifs
 o WDScriptInfo() nouveau format (tables HTML) et ajout des informations du projet (sauf mots de passe), modules et droits
 o Nettoyage de la pile des erreurs afin de ne pas afficher la pile des appels internes à wdscript
 X L'extension des fichiers de configuration .WSP devient .INI (meme si .WSP toujours compatible)
 
v2.4.9 (21-01-2010) - WD15 039g
 + Support FastCGI Microsoft IIS 7.5 (via libfcgi2.dll)
 + Ajout fonction ProjetFichierIni()/ProjectIniPath() pour récupérer le chemin complet du projet en cours
 * Fixed Linux FastCGI (Lighttpd) First Request Error
 * Utilisation de DOCUMENT_ROOT/token pour le chemin des Token (par défaut)
 * GetClientIP() traduction des IPv4 au format IPv6 (retrait prefixe ::ffff:)
 * Correctif pour IIS en mode CGI standard (bug v2.4.8)
 * WDScriptinfo() affiche le chemin de l'executable en mode FastCGI
 o Amélioration gestion des erreurs de script
 o Optimisation du temps de chargement des fichiers de type INI
 o Optimisation via remplacement de la fonction WL.fTaille(), lente sous wd15
 
v2.4.8 (15-01-2010) - WD15 039g
 + Gestion "serveur" FastCGI
   Serveurs testés compatibles : 
    sous windows avec WSFCGI.DLL (basé sur libfcgi 2.4.0 sources VC6 corrigées)
     Lighttpd 2.4.25 (mod_fastcgi) via TCP/IP
     Apache 2.2.14 (mod_fcgid) via NamedPipe
    sous linux avec wsfcgi.so  (basé sur libfcgi 2.4.0-7 avec quelques ajouts)
     Lighttpd 2.4.25 (mod_fastcgi) via Socket Unix
   L'ancien mode serveur (via PHP) n'est toujours pas conseillé (à revoir)
 
 + Mode Serveur: Rechargement automatique des WDL et Rechargement WDP optimisé
 + Ajout fonctions ProjetIniLit()/ProjectIniRead() pour lire les paramètres du projet (wsp)
 + Ajout PageDansWDL() pour savoir si une page est précompilée
 + Ajout d'un 4eme parametre facultatif à SendBinary() pour forcer le telechargement dans le navigateur (Enregistrer sous...)
 o Renommage des collections de procedures (retrait des espaces) pour forcer l'acces à une procedure surchargée en cas de besoin
 * Correctif IniLit si fichier avec espaces
 * Retrait de certains parametres non utilisés

Commentaires

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

merci pour ce logiciel

merci pour ce logiciel gratuit,

j'aimerais faire un IDE qui mixte l'utilisation de la bibliotheque ajax - sigma et wdscript

si je reussi a mettre en branle ce projet je vous en ferai par de mes progrès.

encore merci pour votre travail.

Merci, toute aide est la

Merci, toute aide est la bienvenue :)

Je cherchais aussi un framework ajax pour compléter wdscript, celui ci m'a l'air tres bien :)
Reste à voir comment l'interfacer...

Bon, le mode FastCGI Windows Apache est terminé, je passe à Lighttpd Windows...

Serveurs testés compatibles

Serveurs testés compatibles :

Sur Windows 7 avec libfcgi2.dll (sources non dispo.)

  • IIS 7.5 (FastCgiModule) via Named Pipes
  • IIS 7 (FastCgiModule avec derniere Maj MS) via Named Pipes

Sur Windows 7 avec WSFCGI.DLL (basé sur libfcgi 2.4.0 cvs (fastcgi.com) revu et corrigé)

  • Lighttpd 2.4.25 (mod_fastcgi inclus) via ports TCP/IP
  • Apache 2.2.14 (mod_fcgid 2.3.4 et +) via Named Pipes

Sur Linux Debian 5 et Ubuntu 10.4 avec wsfcgi.so (basé sur libfcgi 2.4.0-7 avec quelques ajouts)

  • Lighttpd 2.4.25 (mod_fastcgi inclus) via Socket Unix
  • Apache 2.2.14 (mod_fcgid 2.3.4 src) via Socket Unix

fastcgi

Bonjour,

J'aimerais savoir comment activer le mode fastcgi est-ce qu'il y a un bouton pour l'activer ou un script a éditer en y changeant une commande ?

Merci.

FastCGI...

Sur quel serveur ? si EWS c'est deja activé... Si Apache un script, Si IIS 7 une coche et un champ, SI IIS 6 un module, un champ et peut etre un script...

Voir la doc dans le wiki (lien wdscript en haut de ce site)