Este tutorial é o processo de aprendizagem de C++ quando eu era estudante. Depois de trabalhar, não tenho mais energia para escrever o resto. Olhando para o código daquela época, havia muitas imperfeições e até falhas. modificar, desenvolver e continuar o projeto. Para uma biblioteca básica da linguagem C mais perfeita, vá para wheelib
Deixe-me começar com a conclusão: não importa qual linguagem seja usada, a base de todo desenvolvimento de back-end é o desenvolvimento de servidor C/C++ para Linux.
Quase todos os servidores de alta simultaneidade são executados no ambiente Linux. O autor já escreveu servidores em Java e nó antes, mas no final descobri que apenas aprendi uma tecnologia e uma linguagem, mas não entendi os princípios básicos. O processo de uma solicitação HTTP, por que alta simultaneidade pode ser alcançada, como controlar conexões TCP, como lidar com a lógica de transmissão de dados, etc., só pode ser compreendido em profundidade pela programação em C/C++.
Este tutorial imita "30 dias para criar seu próprio sistema operacional" e é voltado para iniciantes sem experiência. Ele ensinará como começar a desenvolver servidores Linux em 30 dias. Este tutorial é mais prático e se concentrará em como escrever código sem gastar muito espaço explicando os princípios básicos de informática por trás dele. Capítulos específicos dos livros correspondentes serão fornecidos quando relevante, mas isso não significa que esse conhecimento teórico não seja importante. Na verdade, a base teórica é muito importante. Sem suporte teórico, não faz sentido construir um servidor de alto desempenho.
Este tutorial espera que os leitores:
Depois de concluir este tutorial, você entenderá facilmente o código-fonte do muduo.
Uma das dificuldades em aprender C/C++ é que você não pode fazer coisas reais quando aprende. Não há feedback e o programa é executado em uma linha de comando escura. Ao contrário do desenvolvimento web, você pode ver os resultados do seu aprendizado em. a qualquer momento. O código deste tutorial é colocado na pasta de código. Depois de estudar todos os dias, você pode obter um servidor que pode ser compilado e executado, e o desenvolvimento iterativo continua.
Há uma pasta de código para cada dia na pasta de código e use ./server
comando make
para compilar. Dois arquivos executáveis serão gerados. Em seguida, crie um novo Terminal e digite ./client
para executar o cliente e interagir com o servidor.
day01-Comece com o soquete mais simples
dia 02-Não deixe nenhum erro passar
day03-Para alta simultaneidade, epoll deve ser usado
dia04- Vamos dar uma olhada na nossa primeira aula
estreia do canal de uso avançado day05-epoll
day06-Aparecem classes principais orientadas a eventos e servidores
day07-Adicionar um Acceptor ao nosso servidor
day08-Tudo é uma classe, até as conexões TCP não são exceção
day09-buffer-grande papel
day10-junte-se ao pool de threads ao servidor
dia 11-Melhore o pool de threads e adicione um programa de teste simples
day12-Reescrever o servidor no modo multi-thread do Reactor mestre-escravo
day13-Engenharia C++, análise de código, otimização de desempenho
day14-Suporte à personalização da lógica de negócios e melhore a classe Connection
day15-macOS oferece suporte e melhora a personalização da lógica de negócios
day16-Refatore o servidor e use ponteiros inteligentes
temporizador
Sistema de registro
Suporte ao protocolo HTTP
teste de webbench
O download do arquivo é retomado em pontos de interrupção
Armazenamento de recursos estáticos
...
O projeto Wlgls/30daysCppWebServer tenta escrever partes subsequentes para referência.
Minha habilidade é média e meu nível é limitado. Se você achar que meus tutoriais estão incorretos ou merecem ser melhorados, sinta-se à vontade para levantar um problema ou fazer relações públicas diretamente.
Todos são bem-vindos para contribuir com seu próprio código para este projeto. Se você tiver um código que considere melhor, envie um problema ou PR diretamente. Todas as sugestões serão consideradas.
Para contribuir com código, acesse o projeto pine, que é a biblioteca de rede desenvolvida neste tutorial e também é a versão mais recente do código.