Princípio do OkHttp e explicação do mecanismo

Princípio do OkHttp e explicação do mecanismo

Link para este artigo: https://blog.csdn.net/feather_wch/article/details/131767285

1. Quais são os princípios e mecanismos do OkHttp?

  1. Aplicação de padrões de design: padrão de construtor, padrão de aparência, padrão de cadeia de responsabilidade
  2. processo geral
  3. Distribuidor (mecanismo de agendamento)
  4. Multiplexação de link TCP (mecanismo de multiplexação)
  5. processo interceptor
  6. mecanismo de cache

2. A diferença entre Http 1.1 e Http 2.0

  1. 1.1 keep-alive, serial, ordenado -> O pedido é baseado em texto e deve ser solicitado
  2. Compressão de cabeçalho 2.0 (menor), ServerPush (push ativo do servidor), multiplexação, paralelismo, derivado do uso de quadros de dados binários (armazenamento de sinalizadores de sequência)

3. Processo geral da solicitação OkHttp

flowchart TD
    OkHttpClient --newCall 参数Request--> RealCall --execute/enqueue--> Dispatcher --> Intercepter --> Response

4. Distribuidor (mecanismo de agendamento)

  1. Sincronização: executa diretamente o processo do interceptador
  2. Assíncrono: enviar para a execução do pool de threads
  3. Membros internos do agendador:
    1. Número máximo de solicitações assíncronas simultâneas, 64
    2. O número de solicitações assíncronas simultâneas para o mesmo host, 5
    3. Grupo de discussão
    4. fila de espera assíncrona
    5. fila de execução assíncrona
    6. fila de execução síncrona
  4. Conjunto de threads: core=0, max=65535, waitTime=60s, queue=sem capacidade, equivalente a CacheThreadPool
    1. Crie um thread quando houver uma solicitação, 60s expira
    2. O número máximo de threads é ilimitado & 64 = 64
  5. Depois que a tarefa é executada, finish() faz o trabalho de limpeza
    1. Síncrono/assíncrono deve estar fora da fila
    2. Assíncrono: calcular de acordo com 64 e 5
    3. O método promoteCalls() reagenda a solicitação

5. Mecanismo de agendamento, processo de solicitação assíncrona

  1. Se não houver mais de 64 solicitações assíncronas ao mesmo tempo e o número de solicitações de um mesmo host não exceder 5, a solicitação será iniciada e ficará na fila de execução assíncrona
  2. Se a condição não for atendida, ele será colocado na fila de espera assíncrona para aguardar
  3. Depois que a solicitação assíncrona for concluída, execute finish() para limpar o trabalho e verifique as duas condições de 64 e 5. Se as condições forem atendidas, promoteCalls() será chamado para reprogramar a solicitação

6. Interceptador + Cadeia de Responsabilidade

  1. *Interceptador de usuário personalizado: log imprimível, addInterceptor
  2. Tente novamente o interceptador de redirecionamento: 1. Protocolo 2. Tempo limite 3. Exceção de E/S 4. Exceção de SSL (protocolo de segurança SecureSocketLayer)
  3. Bridging Interceptors: Gzip, Cookies
  4. Interceptador de cache: mecanismo de cache
  5. Interceptador de conexão: abra a conexão com o destino, RealConnection (encapsula o Socket e o pool de conexão do Socket)
  6. *Interceptador de rede personalizado: addNetworkInterceptor
  7. Interceptador de serviço de solicitação: gravar dados + flushRequest (realmente enviar a solicitação)

Mecanismo de multiplexação de conexão TCP

8. Pool de conexão OkHttp e mecanismo de multiplexação de conexão

  1. O mecanismo de multiplexação de conexão é implementado com base na classe ConnectionPool.
  2. A classe ConnectionPool mantém uma fila dupla para armazenar objetos RealConnection ociosos.
  3. O objeto RealConnection representa uma conexão TCP que pode ser compartilhada por várias solicitações. ³⁴
  4. Quando um usuário inicia uma solicitação, o OKHTTP primeiro verifica se existe uma conexão inativa que atenda aos requisitos do pool de conexões. Se houver, ele usará diretamente a conexão para enviar a solicitação. Caso contrário, ele criará uma nova conexão e a adicionará ao pool de conexões.
  5. Mecanismo de limpeza: OKHTTP usa um thread em segundo plano para limpar periodicamente as conexões ociosas. As condições de limpeza são:
    1. Se uma conexão estiver inativa por mais de 5 minutos
    2. Ou o número de conexões ociosas no pool de conexões excede 5

mecanismo de cache

9. Mecanismo de cache

  1. Cache forte: não envie solicitação, campo expira
  2. Cache de negociação: 304 indica que o cache está disponível
  3. Datat、Expira、Última modificação、ETag

10. Análise detalhada do mecanismo de cache

  1. O mecanismo de cache do OkHttp é implementado de acordo com o mecanismo de cache do HTTP. A lógica de cache de dados específica do OkHttp é encapsulada na classe Cache , que é implementada usando DiskLruCache . ¹³
  2. Por padrão, OkHttp não armazena dados em cache. Você pode definir o objeto Cache ao construir OkHttpClient e especificar o diretório de cache e o tamanho do cache em seu construtor. ¹³
  3. OkHttp fornece um lote de estratégias de cache opcionais, que são configuradas uniformemente por meio de CacheControl , e podemos ver a estratégia de cache por meio do construtor. ²
  4. O mecanismo de cache do HTTP é dividido em cache forte e cache de negociação . A implementação desses dois caches é controlada por meio dos campos de informações do cabeçalho do protocolo HTTP e, em seguida, julga se deseja carregar dados diretamente do cache local de acordo com o tempo de expiração.

Acho que você gosta

Origin blog.csdn.net/feather_wch/article/details/131767285
Recomendado
Clasificación