Newsgroup: it.comp.lang.c
Titolo: Webserver modulare

Giorno a tutti,
chiedo scusa se il titolo del topic non è autoesplicativo ma non
sapevo proprio cosa metterci.
Qui vorrei condividere e scambiare alcune informazioni e consigli
riguardo un progetto che sto realizzando (attualmente le cose
basilari) : un webserver.
Mi piacerebbe inoltre poter definire un handler dei moduli cosi da
semplificare la scrittura di nuovi moduli e rendere questi
perfettamente (o quasi) "autonomi" (senza quindi dover star li a
modificare ogni volta il core server).
Iniziamo con ordine e voglio proprio togliermi qualche dubbio
studiando innanzitutto l'indice di convenienza a creare un nuovo
webserver. Praticamente il progetto che sto buttando giù prevede un
core minimale (classico sistema networking client/server che accetta
le richieste e si limita alla gestione dei vari metodi HTTP/1.0 (al
momento) e al trasferimento dei file statici html. Tutti gli altri
servizi come ftp, cgi, fastcgi o moduli specifici (estensione del
metodo di log, supporto a linguaggi dinamici senza cgi etc etc) da
attivare in base alla scelta dell'amministratore.
Secondo voi conviene realmente realizzare un progetto simile ? E
precisamente non intendo ricevere risposte tipo "ma già apache/
lighttpd/nginx lo fà" ma qualcosa di motivato e costruttivo perchè
vorrei proprio realizzare un sistema rapido  e leggero (di base
intendo) con un ottimo sistema di integrazione dei moduli, e tentare
tramite questo di rimuovere il classico tallone d'achille dei
webserver: i contenuti dinamici.
Per adesso mi limito a questo man mano (sperando che almeno qualcuno
si unista e sia interessato) esporrò altro riguardo i dettagli
tecnici.
Per ora grazie a chi legge e buona notte a tutti!


Ciao Alessandro. Guarda, ho realizzato da un po' un webserver anch'io,
si chiama mojito e lo sto pubblicando in questi giorni. Stranamente ci
sto mettendo di più a scrivere due pagine e a mettere su un svn e bug
tracker di quanto ho messo a scrivere il webserver stesso :-)
Ti dico la mia. Io ho iniziato per divertimento, e continuo per
divertimento. Scrivere una cosa del genere sperando che prenda piede è
perlopiù ridicolo, considerando gli anni di esperienza e il numero di
programmatori presenti sui principali progetti in uso oggi. Oltretutto
studiarsi le specifiche HTTP/1.0 è palloso, quelle CGI1.1 è
stressante, quelle FastCGI sono praticamente inesistenti e quelle SAPI
(o NSAPI o simili) sono *del tutto inesistenti*, quindi ti devi
leggere il codice (e poi patchare i sistemi che vuoi supportare,
quindi doppio o triplo lavoro).
Dirai allora "perché?". Non so, personalmente credo che far girare il
proprio sito sul proprio webserver non abbia prezzo (e poi sì, già
m'ero studiato metà delle specifiche che servivano per altri lavori,
avevo le funzioni di parsing pronte e avevo già scritto un caching
proxy in php :-) ).
Se decidi di continuare e ti serve una mano chiama. Se vuoi dare
un'occhiata al mio codice entro la settimana (spero) sarà tutto
online.
Ciao!


Ciao :-),
innanzitutto grazie per la risposta e per la disponibilità, l'apprezzo
molto :-).
Io ho iniziato a progettarlo più che altro con l'intento di scrivere
qualcosa non solo per divertimento (che è comunque il solo motivo che
mi spinge a dedicargli tutto il mio tempo libero) ma anche per motivi
didattici (imparare e "toccare con mano" un sistema che permette
l'utilizzo del servizio internet più diffuso non è cosa da poco). In
effetti non penso affatto che prenda piede o comunque in grado di
competere coi più blasonati webserver del giorno d'oggi (che grazie ai
moduli permettono di fare tutto dall'http server che fornisce pagine
statiche o dinamiche al mail server, al proxy server e così via con
ftp  e altro ancora). Più che altro è poter, appunto come dicevi,
avere la soddisfazione di avere il tuo/tuoi sito/siti su un proprio
webserver e non solo: avere la possibilità di avere un webserver
adatto realmente alle proprie necessità.
Precisamente quello che *vorrei* progettare non è altro che un
webserver (di base) minimale che occupi poche risorse e quelle poche
le sfrutti al meglio. Ovviamente nella base non gli metterei alcun
servizio dinamico per aumentarne la sicurezza, ma invece gli metterei
una interfaccia comoda che permetta l'espansione attraverso i moduli.
Una cosa semplice ma efficace per dirla breve. E poi espandibile
tramite tutti i moduli (che per semplicità credo, almeno in un primo
momento, di non sfruttare alcun caricamento di libreria dinamica che
per altro richiederebbe anche i controlli sul supporto del sistema, ma
di compilare tutto assieme).
Alcune delle specifiche le ho già lette e molte cose le sapevo già
(non la maggior parte ma i fondamenti si). Ho letto le specifiche cgi
e http/1.0 e le introduzioni sui cambiamenti introdotti da http/1.1.
Inoltre proprio per semplificare il tutto non credo di inserire il
supporto a tutti i metodi ma almeno per l'inizio solo i più semplici
GET e POST. (gli altri gestirli come "501 Method Not Implemented" ).
Eventuali metodi che richiedano autorizzazione di login per la
gestione di file (tipo PUT/DELETE) da aggiungere sempre tramite
moduli.
Più che altro mi interesserebbe far girare sul webserver un modulo per
eseguire applicazioni python senza i problemi cgi (o una api o un una
implementazione di wsgi). Esistono certamente le psp per apache, ma
apache non è affatto snello. Lighttpd è snello ma portato
principalmente all'uso di contenuti statici (il suo punto di forza).
Quindi mi era balzata in testa questa idea con le altre motivazioni
già dette, non certo per fini commerciali o simili...
Concludo questo immane miscuglio di pensieri dicendo che proprio
riguardo il linguaggio di configurazione pensavo di realizzarne uno
allo scopo e di permettere anche di utilizzare (se ovviamente esiste
il modulo) un linguaggio già esistente come linguaggio di
configurazione. (potrebbe essere perl o qualunque altro).
Insomma ti ringrazio per la risposta... proprio quello che cercavo.
Ti ringrazio ancora anche per la tua disponibilità ad aiutarmi... ce
ne sarà bisogno :)
Per ora chiudo ma appena riesco inizio a esporti qualche idea riguardo
la progettazione cosi magari potrai aiutarmi a migliorarla e potremo
discutere di varie cose :)
Buona giornata!

 Buona giornata!
In bocca al lupo e tieni duro.
Fossi in te insieme alla progettazione inizierei a scrivere un mockup
con le funzioni principali per la gestione dei socket e il parsing del
protocollo, che è la parte più "facile" in teoria. E' anche la parte
che ti fa capire se hai veramente voglia di continuare seriamente o
no, visto che ti trovi a bestemmiare su le stesse venti/trenta righe
per *giorni* cercando di visualizzare ogni possibile hack (e, sempre
per esperienza, man mano che vai avanti fatti qualche programmino per
testare le richieste client più bastarde che cerchi di risolvere, e
usali come test). Tieni in mente che alla fine non serve a nessuno un
webserver che riesce a far girare veloce python ma che va in crash con
una semplice richiesta GET un po' strana.
Ciao!


Ti ringrazio per questi consigli, per me sono oro. Se ne hai altri,
anche banali (per te) ti prego di esporli tanto sicuramente vanno ad
aiutarmi e se già li conoscevo mi aiuteranno a ricordare ;-)
Intanto sto abbozzando un primo schema per fare (come mi hai
consigliato) un mockup in modo da poterlo poi estendere senza dover
rimplementare poi tutte le funzioni :)


Ciao,
dato che come detto vorrei puntare ad alte prestazioni, pensavo di
sfruttare il multithreading, nonostante ciò richieda la scrittura di
codice in più e diversi grattacapi aggiuntivi.
Quindi, a puto titolo comparativo mi chiedevo, il tuo webserver
"Mojito" sfrutta il multithreading o il multitasking?
Ti ringrazio in anticipo, inoltre, a meno che tu non voglia dedicare
un topic al rilascio del tuo webserver, vorrei invitarti ad indicarmi
in questo topic quando i sorgenti saranno online. Giuro che non
scopiazzo il codice, vorrei solo vedere un webserver funzionante (non
i classici "simply web server" ) che non abbia dei sorgenti incasinati
alla nginx o apache. :)
Grazie ancora, e buona notte.

 
Nginx è uno dei progetti con il codice meglio organizzato che abbia mai 
visto.
C'è solo una mancanza di commenti, ma una volta capita l'architettura il 
codice si legge benissimo.
Ciao  Manlio

On Jul 30, 11:55 pm, Manlio Perillo <manlio_perill...@SPAMlibero.it>
wrote:

Certo, io non mi riferivo all'organizzazione, certamente data la mia
esperienza non potrei nemmeno riferirmi a questo dato che progetti di
una certa complessità li ho solo visti da lontano. Mea culpa che non
mi sono spiegato. Mi riferisco al fatto che utilizza tutte funzioni
"ngx_" ovvero reimplementate da Sysoev, anzichè utilizzare
direttamente nei file.c le funzioni delle librerie standard, almeno
dove possibile (alla lighttpd, insomma). Certo questo ne fà la
potenza, ma per imparare IMHO non è il miglior sorgente da seguire se
non per gli algoritmi. Aggravato poi dalla mancanza di commenti : il
più frequente è Copyright (C) Igor Sysoev.
- C'è solo una mancanza di commenti, ma una volta capita
l'architettura il
- codice si legge benissimo.
Eh, appunto, capirla l'architettura. Il codice è molto esteso essendo
il progetto avanzato, e seguire tutto dai primordi richiede molto più
tempo di un codice commentato o comunque che utilizzi subito metodi e
funzioni standard.
Nonostante ciò, tanto di cappello a chi ha realizzato da zero un
progetto simile.
Ciao ciao, buona notte.


Mojito andrà sotto GPL, quindi DEVI scopiazzare il codice - ovviamente
a patto di inviarmi le patch di fix ai bug che trovi :-) E ovviamente
sì, se prendi qualche pezzo poi devi mettere anche te sotto GPL.
I miei sorgenti sono... beh, scritti bene. Mi spaventa il fatto che
anche quelli di nginx e di apache son scritti bene (forse apache un
po' meno) e quindi magari dirai che sono incasinati pure i miei :D
Fatto sta che il mio fa così poche cose che è facile leggerselo
velocemente. Diciamo che di tutti forse come codice assomiglia più a
boa.

 boa.
A questo punto con le tue strategie di "marketing" hai catturato la
mia attenzione e non vedo l'ora di poterne scaricare i sorgenti.
Ancora grazie per la precisa esposizione,
ciao e buona giornata.
- Alessandro


Ahaha - guarda, io di marketing ne so quanto di fisica nucleare
(ovvero mi limito a sapere che esistono due cose con quel nome).
Comunque sì, anch'io non vedo l'ora di metterli online - sono stato
pieno di lavoro tutta la settimana, spero che Sabato o Domenica siano
pronti!

 pronti!
Ci spero allora. Inoltre se non vogliamo continuare a messaggiare qui,
se per te và bene ti invierei a questo indirizzo (che stai usando) il
mio indirizzo personale (non questo che con tutti i thread dei vari
newsgroup ogni giorno ho tanti messaggi e tra i tanti potrebbero
sfuggirmi quelli a me destinati) perchè veramente una volta tanto che
mi capita la fortuna di incontrare qualcuno competente nel campo
vorrei "approfittarne" (senza cadere nello stalking ovvio lol) per
scambiare delle opinioni in merito.
Ti ringrazio ancora, care cose.
Buona giornata,
- Alessandro


Sicuro - invia pure, mi fa sempre piacere dare una mano.
Ciao