Tocar pedido quadro fluxo de processamento

quadro jogo usa um modelo orientado a eventos para fornecer capacidades de processamento flexíveis em um ambiente operacional imprevisível.

Em uma aplicação web, o evento refere-se principalmente aos utilizadores iniciar uma solicitação HTTP para o servidor. Para que o quadro Play, tais eventos são definidos no arquivo de rotas, reproduzir o conteúdo do arquivo e rotas a solicitação do usuário, para determinar quais procedimentos devem ser invocado. Jogar Netty quadro usando o servidor, o servidor usa um oleoduto (pipeline), proporciona uma excelente capacidade de processamento assíncrono sob condições de alta concorrência.

Quando o servidor recebe uma solicitação do usuário com o tempo, você vai ter um oleoduto, uma informação solicitação de entrada, quadro após o processo de reprodução referido. quadro jogo será baseado no conteúdo do pedido, encontrar as regras correspondentes roteamento, regras de roteamento de chamadas com base no fluxo de processamento de eventos correspondente, e (na vontade geral) eventualmente retornar resultados para o usuário, para concluir um acordo com o evento:

Figura 1. O fluxo de eventos

Um processamento de pedido do utilizador fluir Classe

Como um framework de aplicações web, a estrutura básica é função de reprodução em resposta às solicitações dos usuários. Nesta seção, o usuário solicita um resumo sobre quando (request) chega, o jogo que vai começar a processar o pedido é processado e, finalmente, de volta para o usuário apropriado. Esta seção enfoca o processo indicado, uma vez que este processo envolve três aspectos para o MVC, para uma específica detalhes de implementação será descrito mais tarde.

 

Em primeiro lugar, a introdução de classes relacionadas

Antes de descrever o fluxo de processamento, é necessário introduzir algumas das classes envolvidas no processo aqui. Esta secção centra-se na estrutura de classe dessas classes, e eles desempenham um papel importante neste processo.

 

1, PlayHandler

PlayHandler herdou org.jboss.netty.channel.SimpleChannelUpstreamHandler, na calha para o processamento de solicitações do usuário para os escutas servidor. classe FIG como se segue:

classe FIG 2 FIG PlayHandler

A coisa mais importante é

mensagem recebida(

 definitiva ChannelHandlerContext ctx,

 definitiva MessageEvent messageEvent)

Método. O método de reescrever o mesmo nome que a função classe principal (Substituição). Pai proporcionar esta função, fornecida pela aplicação específica de cada subclasse. Quando a notícia chega, a classe manipulador função de chamadas do servidor messageReceived, o uso de multi-estado, irá realizar diferentes implementações.

Em HttpServerPipelineFactory.getPipeline (), quando o pipeline cada necessidade, uma nova instância do PlayHandler, registrado no pipeline. Assim, cada pedido irá ser tratada como uma nova instância PlayHandler seguido PlayHandler.messageReceiveed () método é chamado para processar o pedido do utilizador. executa método PlayHandler.messageReceived () o processo vai ser descrito mais tarde.

     

2, Invoker e invocação

Jogar comando Quadro Mode (padrão Command), para agendamento em um multi-tarefa multitarefa caso, o modo de comando do protótipo é a seguinte:

Modo de Comando Protótipo 3

No modo de comando, o cliente chama Invoker, para adicionar comando. Comando representa um comando, os desenvolvedores herdar comando e implementar um comando específico, submetido à execução para o Invoker. Invoker é responsável pela gestão desses comandos, executá-los no momento certo, e fornecer os resultados. Uma operação de modo de comando do objeto de solicitação e saber como executar um objeto operação separada. Desta forma, os desenvolvedores só precisam se concentrar em alcançar comando, sem a necessidade de se concentrar em quando e como executar o comando.

    Tocar no quadro, e no prazo de implementos classe Invoker invocação o modo de comando, que corresponde ao comando de chamada classe, subclasse implementadas pelo seu método de execução (aqui expresso como método de execução ()). FIG sua classe como se segue:

classe FIG 4 Invoker FIG

E A Fig. 5 invocação FIG DirectInvocation classe

 

Em Invoker, principalmente invocação de métodos e método invokeInThread. Os ex-usos (ScheduledThreadPoolExecutor) a execução de thread executor agendamento de invocação, este último para executar tarefas diretamente no segmento atual, quando a execução não for bem sucedida, re-executado depois de esperar por algum tempo. Invoke método também oferece uma outra versão da função sobrecarregada, então você pode executar a tarefa actual, depois de esperar por algum tempo: invoke (invocação Invocation final, longmillis).

Sobre java.util.concurrent.ScheduledThreadPoolExecutor: herdado de java.util.concurrent.ThreadPoolExecutor, para execução após um determinado comando de atraso, ou para executar periodicamente, quando thread secundário múltipla, ou têm requisitos adicionais de flexibilidade ThreadPoolExecutor ou função, tal temporizador superior.

Invoker.invoke código (Invocation) é o seguinte, você pode ver como o executor está programado Invocation:

publicstatic Future<?> invoke(final Invocation invocation) {

       Monitor monitor = MonitorFactory.getMonitor(

"Invokerqueue size", "elmts.");

       monitor.add(executor.getQueue().size());

       invocation.waitInQueue = MonitorFactory.start("Waiting forexecution");

        returnexecutor.submit(invocation);

}
publicvoid run() {

           if (waitInQueue != null) {

               waitInQueue.stop();

           }

           try {

               preInit();

               if (init()) {

                    before();

                    execute();

                    after();

                    onSuccess();

               }

           } catch (Suspend e) {

               suspend(e);

               after();

           } catch (Throwable e) {

               onException(e);

           } finally {

               _finally();

           }

    }

Implementado em um Template Method Invocation (modelo método padrão), define o método passo run (), e será encaminhado Subclasses implementar implementação das várias etapas de uma forma a completar os comandos personalizados modo de comando . Template Method padrão protótipo é a seguinte:

protótipo padrão Figura 3-6 Template Method

 

Modo de reprodução No método da implementação específica do quadro do modelo, a interface Execut�el implementos de invocação, o método de execução (), como segue:

 

 

execução () método é o método de molde, o método de execução (), a fim de chamar a Init (), antes (), executar (), depois (), onSuccess método () e semelhantes, estes métodos requerem uma subclasse de invocação implementação, a fim de alcançar diferentes funções. Por este desenho, o processo de execução está dividido numa pluralidade de porções, cada implementado por subclasses, mas a ordem de execução da porção predeterminada da classe pai. Daqui em diante, será feita referência PlayHandler.NettyInvocation, que é uma subclasse de invocação.

 

3, classe Resultado

Resultado herdada de um RuntimeException, a camada de visão encapsular o resultado prestados (que pode ser um arquivo HTML, um arquivo XML pode ser um arquivo binário, ou semelhantes), hierarquia de classes como segue:

Fig. 3-7 Resultado estrutura herança classe da FIG.

 

Tocar FastRunTimeException é definido em um quadro pode ser instanciada e rápida classe excepção arremesso (exceção), principalmente modificado método fillInStackTrace (), que retorna directamente nulo, permitindo a rápida instanciado:

 

pública  Throwable fillInStackTrace () { returnnull ;}

 

Resultar em, fornecida aplicar o método (), este método requer uma substituição de subclasse, implementar as funções dos conteúdos correspondentes da saída.

Sob resultado, o jogo oferece várias subclasses Resultado para a implementação das diferentes medidas adequadas, que é de classe RenderTemplate mais comum que implementa a funcionalidade do arquivo de modelo para a saída final.

Resultado Como vai tentar formar uma exceção e / catch para Resultado captura, em vez dos valores de retorno, que é relativamente incomum ponto quadro Reproduzir. Isto não se conforma com geralmente "exceção (Exception)" view - Em geral, apenas quando o programa aparece circunstâncias imprevistas, vai usar bloco try / catch para capturar a exceção. No entanto, uma exceção é lançada como resultado de renderização e captura, para simplificar o código, determinada pelo próprio processo de execução Java, melhorar a eficiência do desenvolvimento do colaborador; No processo de um processo de solicitação do usuário, muitos lugares pode retornar resultados diretamente (por exemplo, direta Voltar página 404), o quadro durante o processamento de todos os resultados de processamento e retorno ao mesmo local e processo de juiz unificado, se o valor de retorno, como resultado, requerem abordagem mais complicado de recolha e tratamento dos resultados.

 

4, classe Template

classe de modelo fornece um pacote de arquivos de modelo, compilar e executar e implementar o arquivo de modelo. relação de Classe herança é como se segue:

Fig. 3-8 Molde estrutura herança classe da FIG.

A classe final realmente usado GroovyTemplate que representa um arquivo de modelo, um método (render (Map <String, Object>)) na renderização de páginas (converter os arquivos de modelo de html) é.

Em RenderTemplate discutido anteriormente, uma passagem (Modelo) Molde no construtor (isto é, um RenderTemplate "possui" um exemplo molde), e executa

 

este .content = template.render (args);

 

Chamada Template.render (args) irá processar os resultados armazenados no conteúdo.

 

Em um fluxo de solicitação de processamento, sequencialmente sofre PlayHandler-> Invoker-> Invocation-> result-> Template

Vire https://blog.csdn.net/hjxgood/article/details/53910969

Publicado 15 artigos originais · ganhou elogios 7 · vê 10000 +

Acho que você gosta

Origin blog.csdn.net/J_M_S_H_T/article/details/88245598
Recomendado
Clasificación