Escolar Documentos
Profissional Documentos
Cultura Documentos
Operativos
2014/2015
Trabalho
Prtico
Servidor
HTTP
1. Objetivos
do
trabalho
Desenvolver
um
servidor
web
na
linguagem
de
programao
C
com
suporte
de
multi-threading,
acesso
a
informao
esttica
e
dinmica,
gesto
de
configuraes
e
de
estatsticas.
Explorar
os
mecanismos
de
gesto
de
processos,
comunicao
e
sincronizao
entre
processos
no
sistema
operativo
Linux.
2. Viso
geral
do
funcionamento
do
servidor
A
Figura
1
apresenta
uma
viso
geral
do
funcionamento
do
servidor
a
desenvolver.
Thread #1
HTTP Request
Thread #2
Receiver
HTML Pages
...
Scheduler
Requests
buffer
Child
process
Thread #N
Script
Shared
memory
Message
queue
Configuration
manager
Statistics
manager
Configuration
Statistics
3.3. Estatsticas
de
funcionamento
Pretende-se
armazenar,
em
ficheiro,
estatsticas
relativas
ao
funcionamento
do
servidor.
Tal
como
a
Figura
1
ilustra,
o
processo
de
gesto
das
estatsticas
responsvel
por
receber
a
informao
sobre
os
pedidos
aceites
e
processados
pelo
servidor
atravs
de
uma
fila
de
mensagens.
Cada
mensagem
conter
informao
sobre
um
pedido
HTTP
tratado
pelo
servidor,
informao
esta
que
dever
ser
escrita
no
ficheiro
de
logs
na
forma
de
uma
linha
nica.
Para
cada
acesso
HTTP
(a
contedo
esttico
ou
dinmico)
o
processo
de
gesto
das
estatsticas
dever
armazenar
no
ficheiro
de
logs
(numa
nica
linha)
a
seguinte
informao:
Tipo
de
pedido
(esttico
ou
dinmico)
Ficheiro
HTML
lido
ou
o
script
executado
Nmero
da
thread
na
pool
responsvel
por
atender
o
pedido
Hora
de
recepo
do
pedido
pela
thread
e
hora
de
finalizao
(aps
ter
enviado
o
resultado
ao
cliente)
Para
alm
das
estatsticas
anteriores,
o
processo
de
gesto
das
estatsticas
dever
ser
capaz
de
enviar
para
a
consola,
aps
receber
um
sinal
do
tipo
SIGHUP,
a
seguinte
informao:
Hora
de
arranque
do
servidor
e
hora
atual
Nmero
total
de
acessos
a
contedo
esttico
atendidos
Nmero
total
de
acessos
a
contedo
dinmico
atendidos
Nmero
total
de
pedidos
recusados
3.4. Parmetros
de
configurao
Pretende-se
dispor
de
uma
forma
de
definir
alguns
parmetros
de
configurao
do
servidor
num
ficheiro.
Tal
como
a
Figura
1
ilustra,
o
processo
de
gesto
das
configuraes
responsvel
pela
leitura
das
configuraes
definidos
num
ficheiro
e
pelo
seu
armazenamento
numa
zona
de
memria
partilhada.
O
processo
principal
(bem
como
as
vrias
threads)
podero
consultar
a
informao
de
configurao
sempre
que
necessrio
atravs
dessa
zona
de
memria
partilhada.
4
Client
Server
Client
Server
<HTML>
...
</HTML>
A
Figura
3
ilustra
as
mesmas
comunicaes
para
execuo
remota
de
um
script
(acesso
a
contedo
dinmico).
HTTP Request (dynamic content)
Client
Server
Client
<HTML>
...
</HTML>
Server
No
exemplo
anterior,
estamos
a
considerar
que
a
execuo
do
script
pedida
utilizando
igualmente
o
comando
GET
do
HTTP,
tal
como
previsto
na
especificao
CGI
(Common
Gateway
Interface),
sem
lugar
passagem
de
parmetros.
Neste
caso
consideramos
igualmente
que
o
script
no
se
encontra
autorizado
para
execuo
no
servidor.
6
5. Checklist
Processo
Servidor
Tarefa
Utilizar
o
fork()
para
criar
processos
filhos
5%
2%
10%
5%
10%
15%
2%
Aplicar as configuraes
5%
2%
2%
5%
2%
5%
5%
Estatsticas
Geral
Quantidade
de
trabalho
5%
2%
5%
2%
Escrever no ficheiro
5%
2%
2%
2%
Notas
importantes
No
ser
tolerado
plgio
ou
qualquer
outro
tipo
de
fraude.
Tentativas
neste
sentido
resultaro
na
classificao
de
ZERO
VALORES
e
na
consequente
reprovao
na
cadeira.
Em
vez
de
comear
a
programar
de
imediato
pense
com
tempo
no
problema
e
estruture
devidamente
a
sua
soluo.
Inclua
na
sua
soluo
o
cdigo
necessrio
deteco
e
correo
de
erros.
Evite
esperas
ativas
no
cdigo
e
assegure
a
terminao
limpa
do
servidor,
ou
seja
com
todos
os
recursos
utilizados
a
serem
removidos.
Utilize
um
makefile
para
simplificar
o
processo
de
compilao.
Inclua
informao
de
debug
que
facilite
o
acompanhamento
da
execuo
do
programa,
utilizando
por
exemplo
a
seguinte
abordagem:
#define DEBUG //remove this line to remove debug messages
(...)
#ifdef DEBUG
printf(Creating shared memory\n);
#endif
6. Metas,
entregas
e
datas
Data
Meta
Semana
de
Demonstrao
24/11/2014
intermdia
12/12/2014
Entrega
final
Semana
de
Defesa
15/12/2014
Os
alunos
devero
apresentar
o
seu
trabalho
nas
aulas
PL,
preparando
uma
demostrao
do
trabalho
efetuado
at
ao
momento,
que
dever
representar
aproximadamente
25%
do
trabalho
global
necessrio
para
terminar
o
projeto.
O
projeto
final
dever
ser
submetido
no
InforEstudante,
tendo
em
conta
o
seguinte:
Os
nomes
e
nmeros
dos
alunos
do
grupo
devem
ser
colocados
no
incio
dos
ficheiros
com
o
cdigo
fonte.
Inclua
neste
local
tambm
informao
sobre
o
tempo
total
despendido
(pelo
dois
elementos
do
grupo)
no
projeto.
Com
o
cdigo
deve
ser
entregue
um
relatrio
sucinto
(no
mximo
2
pginas
A4)
que
explique
as
opes
tomadas
na
construo
da
soluo.
Crie
um
arquivo
no
formato
ZIP
com
todos
os
ficheiros
do
trabalho.
Defesas
funcionais
em
grupo
nas
aulas
PL
desta
semana.
As
defesas
individuais
escritas
ocorrero
no
dia
17/12/2014.