Wasabi v2.3.4-beta: Alta performance com Assembly nativo, estabilidade em TLS e o início da era modular no VBA
Há poucos dias compartilhei o início do projeto Wasabi, um cliente WebSocket e TCP nativo para VBA com zero dependências. Hoje trago uma atualização que representa um salto técnico considerável. Alcançamos a marca de 20 estrelas no GitHub, o que é um marco gratificante para um projeto focado em um nicho tão específico. Esse apoio me motivou a implementar mudanças profundas na arquitetura do motor de rede.
Abaixo, detalho as novidades da versão v2.3.4-beta.
1. Motor de Alta Performance em Assembly (Wasabi ASM)
O VBA, por ser uma linguagem interpretada, apresenta gargalos severos ao processar arrays de bytes gigantescos de forma sequencial. Para contornar essa limitação, o Wasabi agora utiliza uma engine de Assembly microscópica. O módulo aloca memória executável via API do Windows e injeta código de máquina nativo (x86 e x64) diretamente no processador. Isso permite que operações pesadas de rede rodem com throughput de linguagem C.
- ws_mask (Assembly): Toda a lógica de máscara XOR do protocolo WebSocket foi reescrita em Assembly. Mensagens de vários megabytes que antes sofriam com o overhead dos loops do VBA agora são processadas em microssegundos. Isso também resolveu definitivamente problemas de validação de frames (Error 4002) em gateways rigorosos como o do Discord.
- mem_find (Assembly): Um buscador ultra otimizado que utiliza a instrução de hardware
repe cmpsb. Ele permite varrer buffers TCP massivos em busca de delimitadores quase instantaneamente, sem travar a thread de interface do Office durante grandes transferências de dados. - mem_zero (Assembly): Implementação de limpeza de memória via instrução
rep stosb. No encerramento de uma conexão, todos os buffers sensíveis e credenciais são apagados fisicamente da RAM de forma imediata, elevando o padrão de segurança contra vazamento de dados. - Entropia Nativa do Kernel: Substituí as APIs de criptografia legadas pelo
RtlGenRandom(SystemFunction036). Agora os bytes aleatórios para as chaves de máscara são buscados diretamente do Kernel do Windows com latência mínima.
2. TLS Blindado e Tratamento de Desconexões Graciosas
Um dos maiores desafios em conexões de longa duração, como bots de Discord ou dashboards MQTT, é lidar com o encerramento da sessão por parte do servidor. Em versões anteriores, quando o servidor enviava um alerta de encerramento amigável, o motor Schannel retornava o código SEC_I_CONTEXT_EXPIRED.
O Wasabi identificava isso incorretamente como um erro fatal de descriptografia (ERR 15), o que gerava tentativas de gravação em sockets mortos e crashes locais (ERR 10). Na v2.3.4-beta, esse fluxo foi blindado. O módulo agora intercepta o encerramento gracioso, fecha o estado interno de forma limpa e delega a reconexão silenciosa ao motor de AutoReconnect.
3. O Futuro: A Era dos Frameworks (Middlewares e Extensões)
Este é o início da transição de um script monolítico para um ecossistema modular. Estou estruturando o Wasabi para que o núcleo seja apenas um "Dumb Pipe" focado em Sockets e Schannel.
O planejamento, que já está detalhado no repositório, visa permitir que a comunidade plugue módulos externos para diferentes propósitos:
- Protocolos de alto nível como Socket.IO ou MQTT 5.0.
- Middlewares de segurança para injeção autônoma de headers OAuth, tokens JWT ou criptografia ponta a ponta (AES).
- Desacoplamento da compressão Zlib para uma extensão opcional.
4. Exemplo Prático: Conexão de Baixa Latência com Discord
Combinando o novo motor em Assembly com a desativação do algoritmo de Nagle (NoDelay), conseguimos atingir o limite físico da rota de rede. Segue um exemplo de como implementar uma conexão resiliente:
Dim h As Long
' Ativa compressão Zlib para reduzir tráfego de payloads grandes
Wasabi.WebSocketSetDeflate True, True, h
' Desativa o algoritmo de Nagle para entrega imediata de pacotes
Wasabi.WebSocketSetNoDelay True, h
' Configura reconexão automática (5 tentativas, 1000ms de intervalo base)
Wasabi.WebSocketSetAutoReconnect True, 5, 1000, h
' Conecta ao Gateway do Discord com transporte comprimido
If Wasabi.WebSocketConnect("wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream", h) Then
Debug.Print "Conectado. Latência de rede: " & Wasabi.WebSocketGetLatency(h) & "ms"
Do While Wasabi.WebSocketIsConnected(h)
Dim msg As String
msg = Wasabi.WebSocketReceive(h)
If Len(msg) > 0 Then
Debug.Print "Evento recebido: " & Left(msg, 100)
End If
DoEvents
Loop
End If
Com essas melhorias, o tempo de CPU do seu projeto pode ser dedicado inteiramente à lógica de negócio, enquanto o Wasabi gerencia a complexidade do protocolo em baixo nível.
Links para consulta:
- Repositório: https://github.com/uesleibros/wasabi
- Release v2.3.4-beta: https://github.com/uesleibros/wasabi/releases/tag/v2.3.4-beta
- Roadmap de Extensões: https://github.com/uesleibros/wasabi/tree/main/extensions
Agradeço a todos que estão acompanhando e contribuindo com feedbacks. Estou à disposição para dúvidas técnicas sobre a implementação dos thunks em Assembly ou sobre o uso do motor TLS no VBA.