Multithreaded WebServer
MTWebServer
Introdução
Associado ao estudo de sistemas distribuidos, desenvolvi um web server multithread, para entender melhor o funcionamento de threads, sockets e protocolos comumente utilizados na internet. A aplicação está em sua fase inicial e ainda não suporta muitas conexões, entretanto já implementa conexões TCP, enfileramento de conexões, tratamento das conexões lendo e escrevendo de acordo com o protocolo HTTP.
Atualizacao
As conexões do servidor forma aprimoradas e agora suporta várias conexões simultaneas. O teste do ApacheBench foi feito com 1000 conexões concorrentes, todas, bem sucedidas. Pretendo fazer mais testes em mais concorrência e aumentar a capacidade do PC para file descriptiors.
Intuito
Meu intuito com o desenvolvimento é aprimorar meus conhecimentos em programação, aplicando conceitos teoricos e também aprender com a comunidade. Além de entender os fundamentos de aplicações comuns no mercado como Apache e outras. O repositório da aplicação está no endereço: https://github.com/Elymas-Magus/multithreaded-webserver
Funcionamento
O servidor provê páginas web, via metodo GET (outros metodos não serão implementados nas fases iniciais do projeto), em uma determinada porta. Cada cliente conectado é adicionado a uma fila de conexões, que é desenfileirada por cada uma das thread em execução, tratando concorrencia de recursos e dados. O MTWebServer não contará com um servidor de aplicação no momento, ou seja, o acesso ao conteúdo ficará restrito a arquivos existentes no caminho root, especificado no arquivo de configurações do servidor.
Após resolver o problema do número de conexões pretendo tratar dos pontos listados no paragrafo anterior. Quem puder ajudar a acelerar o processo e contribuir com o desenvolvimento, o repositório está público e aceitando novos pull requests
Caso encontrem algum BUG ou outro problema, seu report será bem vindo.
Ninguem é tão sábio que não tenha algo pra aprender e nem tão tolo que não tenha algo pra ensinar.
Blaise Pascal