Pergunta

Depois de ler o livro de Joe Armstrong e assistir Kevin Smith Screencasts, criei um aplicativo OTP simples composto por um único Gen_Server e supervisor único, reunidos como um aplicativo OTP.

Agora estou olhando para Mochiweb e criei um projeto de amostra [Helloworld] usando o script new_mochiweb.erl. Navegando pelo código -fonte que vejo que não é diferente do meu aplicativo OTP de amostra [o aplicativo OTP está lá, o supervisor está lá] com uma diferença importante. Os arquivos gerados helloworld.erl e helloworld_web.erl não implementam o comportamento gen_server, eles, eles são apenas módulos Erlang padrão.

Eu estava com a impressão de que o uso do Gen_Server era o caminho recomendado ao criar componentes de aplicativos OTP. Por que o Mochiweb pode usar comportamentos de aplicativos e supervisores OTP, mas evitar o Gen_Server?

Foi útil?

Solução

Existe um gen_server, chamado mochiweb_socket_server. Os módulos gerados são apenas "módulos de retorno de chamada" para que o Gen_Server seja chamado ao receber uma solicitação recebida.

Outras dicas

Você usa OTP/Gen_Servers para processos que estão sob uma estratégia de reinicialização - Isso é o reinício deles está sob seu controle.

Esse não é o caso dos processos que representam conexões com os navegadores da Web. Se esse processo morrer, não há como o servidor reiniciá -lo - portanto, executá -lo no OTP é inútil.

O Mochiweb (e as guinadas) usam Gen_Servers para se ligar à porta de escuta e, em seguida, gerar um processo não supervisionado para lidar com uma nova conexão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top