ci dessous un exmple de programme en coffescript (qui sera traduit en javascript) pour un moteur node.js
Le programme commence par récuperer les parametres de lancement
Pour chaque requete le serveur vérifie la présence du fichier dans son cache mémoire (ligne 24-29) . Si le fichier n'est pas en cache, il va le lire, l'envoyer puis le mettre dans son cache mémoire. Le programme est tout simple et il présente une alternative interressante à un serveur Tomcat ou apache.
Il suffit de déployer un sous-répertoire de document dans le répertoire d'installation.
Le point fort de ce serveur est sa simplicité (une vingtaine de ligne) et sa robustesse. Par sa conception et son moteur d'exécution il est capable d'encaisser une charge supérieure à un tomcat ou a un apache dans les mêmes conditions.
C'est un serveur qui ne coute pas cher à deployer ou à maintenir. Il offre plus de sécurité qu'un serveur apache pour le même usage: pas besoin de mettre des options de droit sur l'affichage de répertoire
Le programme est disponible sur https://github.com/germanlinux/Lemon-labs/tree/master/nodeJS
L'idée originale est de casimir Antunes. J'ai ajouté la gestion du cache inMemory et le controle de l'existence des fichiers.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
http = require('http') | |
util = require('util') | |
fs = require('fs') | |
path = require('path') | |
puts = console.log | |
# declaration | |
inMemoryData = [] | |
inMemoryHeader = [] | |
if !process.argv[2] | |
console.log('USAGE: node servdoc.js 8080') | |
return | |
iport = Number( process.argv[2] ) | |
if !process.argv[3] | |
console.log('USAGE: node servdoc.js 8080 rep') | |
return | |
rep = process.argv[3] | |
# IE6 affiche la page d erreur applicative personnalisee que si elle pese un certain poids | |
err = ' <br />' | |
server = http.createServer (request, response) -> | |
if inMemoryData[request.url] | |
data = inMemoryData[request.url] | |
header = inMemoryHeader[request.url] | |
response.writeHead 200,{'content-type': header} | |
response.end data | |
puts " #{request.url} found in memory" | |
else | |
TDoc = request.url.split('/') | |
if TDoc[1] == rep | |
# test si le fichier existe | |
fs.stat '.' + request.url , (error , stats) -> | |
if error | |
response.writeHead(404, {'content-type': 'text/html' } ) | |
response.end( err + "FICHIER NON TROUVE !!") | |
else | |
ext = path.extname( request.url ) | |
switch( ext ) | |
when '.doc' | |
response.writeHead(200, {'content-type': 'application/msword' } ) | |
inMemoryHeader[request.url] = 'application/msword' | |
when '.pdf' | |
response.writeHead(200, {'content-type': 'application/pdf' } ) | |
inMemoryHeader[request.url] = 'application/pdf' | |
else | |
response.writeHead(200, {'content-type': 'text/html' } ) | |
inMemoryHeader[request.url] = 'text/html' | |
util.pump(fs.createReadStream( '.' + request.url), response) | |
fs.readFile '.' + request.url, (error,dataf) -> | |
inMemoryData[request.url] = dataf | |
puts " #{request.url} stored" | |
else | |
response.writeHead(404, {'content-type': 'text/html' } ) | |
response.end( err + "FICHIER NON AUTORISE !!") | |
server.listen( iport, -> console.log( 'SERVER NODE OK SUR LE PORT : ' + iport) ) | |
Aucun commentaire:
Enregistrer un commentaire