Feature/websocket - #532
Merged
Merged
Conversation
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.
feat: Add native WebSocket support (RFC 6455) across all core providers
Este Pull Request introduz o suporte nativo e thread-safe a conexões bidirecionais WebSocket (especificação RFC 6455) no núcleo e provedores do ecossistema do framework Horse, com total compatibilidade retroativa e comportamento Fail-Fast estruturado.
🎯 Objetivos da Implementação
Res.UpgradeToWebSocket.Req.Services).🛠️ Detalhes das Alterações
1. Núcleo de WebSocket
Horse.Core.WebSocket.pas:THorseWebSocketHandshake) calculando chaves baseadas em SHA-1 de forma compatível com FPC e Delphi clássicos.THorseWebSocketParser) que gerencia fragmentação de payloads, máscaras XOR e controle de frames (texto, binário, ping, pong, close).THorseWebSocketManager) que agrupa conexões ativas por rotas e realiza broadcasts inteligentes e thread-safe.2. Modificações na API Core do Horse
Horse.Request.paseHorse.Response.pas:IsWebSocketeWebSocketKey.UpgradeToWebSocketque resolve o adaptador do provedor ativo e eleva o socket.400ou501e interrompe o pipeline de forma limpa.3. Integração com Provedores Físicos
Implementamos adaptadores de I/O específicos para os principais motores de transporte do Horse:
Horse.Provider.Indy.WebSocket.pas): Adaptador de socket integrado aoTIdContextda Indy.Horse.Provider.Socket.WebSocket.pas): Adaptador multiplataforma de I/O em sockets brutos (WinSock2/POSIX) injetado com sucesso nos seguintes provedores:🧪 Matriz de Validação e Testes Multiplataforma
A suíte de testes de integração do DUnitX foi estendida com a unit
Tests.Integration.WebSocket.pascobrindo:400).501).Resultados obtidos:
dcclinux64.exegerada com sucesso total.🎥 Aplicação de Demonstração & APM Dashboard
Para demonstrar visualmente o poder da latência ultra-baixa dos WebSockets, criamos um projeto exemplo independente na pasta
d:\horse-websocketscontendo:(Uma prévia animada da execução do dashboard foi integrada localmente ao README.md do projeto exemplo).