Encerrar um servidor Go de forma ordenada

Coordene um servidor HTTP Go para recusar novas conexões, terminar de enviar documentos aceitos e sair do processo original.

ProjetoGolang

💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês

Introdução

Encerrar um servidor Go de forma ordenada é um projeto prático sobre fechar um serviço de downloads sem abandonar o trabalho em andamento. Comece baixando um documento de texto completo, observe como uma parada imediata interrompe uma transferência aceita e implemente uma coordenação que recuse novas conexões enquanto os downloads existentes terminam no processo servidor original.

Dois laboratórios guiados relacionam os resultados reais do cliente à identidade do processo, à entrega de sinais, ao encerramento HTTP e à responsabilidade de espera de main. Um desafio independente aplica os mesmos mecanismos a duas transferências aceitas de documentos diferentes. Cada unidade fornece seu próprio ambiente e materiais. Reserve cerca de 150 minutos, uma estimativa do autor que inclui leitura e correções comuns.

O que você aprenderá

Ao concluir o curso, você poderá:

  • comparar um download completo e útil com uma transferência interrompida pelos bytes reais dos documentos;
  • identificar o processo Go compilado original do curso e enviar um SIGTERM precisamente para ele;
  • estabelecer que as requisições foram aceitas antes da parada e observar novas conexões recusadas enquanto o trabalho existente continua;
  • usar http.Server.Shutdown com um orçamento de contexto finito para permitir a conclusão de requisições HTTP comuns ativas;
  • distinguir http.ErrServerClosed de erros reais do servidor e manter main aguardando a conclusão do encerramento;
  • preservar um ou dois documentos completos baixados, verificar os resultados dos clientes e servidor originais e manter os arquivos e observações fornecidos.

Para quem é este curso

Este curso é indicado para estudantes de Go prontos para coordenar o ciclo de vida de um pequeno serviço HTTP e suas requisições ativas.

Pré-requisitos: Navegação básica no terminal, manipuladores e valores de erro de Go de Criar uma API de achados e perdidos, além de goroutines e canais de Verificar sites com workers de Go, ou experiência equivalente. IDs de processo, sinais, contextos finitos e a espera de main durante o encerramento são explicados antes do uso.

Ambiente de aprendizagem: A LabEx fornece Go, código inicial do ciclo de vida, um manipulador HTTP preparado, dois documentos de texto reais e ferramentas de observação em um ambiente de terminais no navegador. Use os terminais Server e Downloads na mesma máquina para executar o serviço e seus clientes sem instalar Go localmente. Os comandos, rótulos e a saída do programa permanecem em inglês.

Perguntas frequentes

Preciso conhecer sinais do sistema operacional previamente?

Não. Os laboratórios apresentam a identidade do processo e SIGTERM antes de pedir que você pare o servidor do curso. Os observadores preparados ajudam a identificar requisições aceitas e resultados nativos dos processos; aprender seu formato interno de rastreamento não é necessário.

Chamar Shutdown termina tudo automaticamente?

Main deve aguardar a conclusão do encerramento. Um erro por prazo excedido não prova que o trabalho ativo terminou. O processamento do servidor pode acabar antes de o cliente concluir a leitura ou a gravação dos dados em buffer no arquivo baixado. Por isso, você examina ambos os resultados sem presumir uma ordem entre as mensagens dos terminais.

O que muda no desafio?

Dois documentos diferentes devem estar em transferência quando você para o servidor original. Ambos os downloads devem manter seus bytes exatos, novas conexões devem ser recusadas durante o trabalho ativo e o mesmo servidor deve sair normalmente. O escopo é HTTP comum; WebSockets, troca de tráfego distribuído e garantias de produção sem interrupções ficam fora deste projeto.

Professor

labby
Labby
Labby is the LabEx teacher.

Recomendado para Você

no data