Feature/grpc provider - #526
Merged
regyssilveira merged 26 commits intoJul 13, 2026
Merged
Conversation
…s in console provider
…aks with new unit tests
…er Delphi compilers (10 Seattle)
…er Delphi Seattle
… pool, and thread pooling
…Singleton DI RegisterService overload
…ton DI registration test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 PR: Provedor gRPC Otimizado (Buffer Pooling, Canais Concorrentes e Ciclos de Vida DI)
📝 Descrição
Este Pull Request introduz o suporte nativo a gRPC e transporte HTTP/2 Cleartext (
h2c) no framework Horse através do novo provedor unificadoTHorseGrpcProvider.O desenvolvimento foi focado em entregar ultra-performance sob concorrência corporativa, garantindo portabilidade multiplataforma total (Delphi/Lazarus no Windows e Linux 64-bit) e mantendo a simplicidade de código alinhada com os princípios Clean Code e SOLID.
⚡ Recursos de Arquitetura e Performance Adicionados
1. Injeção de Dependências Dinâmica (Singleton vs. Call Scope)
RegisterServicepara registro de objetos instanciados. O provedor reaproveita a mesma instância concorrentemente nas threads do pool (economizando alocações de RTTI e objetos na heap) e gerencia sua liberação automática no shutdown.2. THorseChannel (Canais Concorrentes Nativos)
THorseChannel<T: class>baseada em fila concorrente protegida por seção crítica.TSimpleEventda API do sistema operacional para colocar threads leitoras em espera passiva quando o canal está vazio, acordando-as de forma instantânea quando dados são injetados.3. THorseBufferPool (Bypass de Alocação de Heap)
4. Serialização Estática via CodeGen e Offsets Físicos
horse-pb-compiler) gera automaticamente métodos estáticosSerialize/Deserializenas classes do protobuf, desviando 100% da reflexão de RTTI.PByte(Obj) + Offset), pulando chamadas reflexivas de escrita de propriedades.📊 Tabela Comparativa de Evolução dos Benchmarks
THorseBufferPool(64KB), compatibilidade POSIX Linux sockets (select).THorseChannel<T>(async streaming).🛠️ Matriz de Compatibilidade e Suporte de Compiladores
A estabilidade e portabilidade do novo gRPC Provider e da unit de Canais Concorrentes foram validadas com 100% de sucesso de compilação e linker:
dcclinux64): SUCESSO (Compilação cruzada nativa com linker concluído com Exit Code 0)🧪 Testes Unitários de Integração (TTestsHorseCoreGrpc)
Todos os testes foram validados localmente com sucesso total e ZERO leaks de memória:
TestChannelSimpleWriteRead: SUCESSOTestChannelTimeoutAndClose: SUCESSOTestChannelConcurrency: SUCESSO (Teste concorrente sob estresse com threads paralelas)TestGrpcSingletonRegistration: SUCESSO (Verificação de ciclo de vida e remoção limpa do dicionário)📂 Arquivos Modificados / Criados neste PR
src/Horse.Core.Channel.pas: [NEW] Implementa a classe thread-safe genérica e abstrata de canais concorrentes.src/Horse.Core.BufferPool.pas: [NEW] Implementa a engine concorrente de reciclagem de buffers de 64KB.src/Horse.Provider.Grpc.pas: [MODIFY] Acopla o buffer pooling, thread pooling, injeção Singleton/Call Scope e loop de gRPC streaming.src/Horse.Core.Protobuf.Rtti.pas: [MODIFY] Gravação direta na heap via offsets e remoção de variáveis inline (Seattle fix).src/Horse.Core.Protobuf.Serializer.pas: [MODIFY] Desvia a serialização para execução estática baseada nas assinaturas de CodeGen.tests/src/tests/Tests.Horse.Core.Grpc.pas: [MODIFY] Adicionados os testes de canais, timeouts, concorrência e injeção DI Singleton.doc/grpc.pt-BR.md: [MODIFY] Atualizada a documentação oficial com instruções do Buffer Pool, CodeGen, Canais e exemplos de microsserviços.