O WebSocket, mesmo em implementações normais, rápidas e corretas, é algo bastante caprichoso. É contraindicado criá-lo em MQL
Na minha opinião: ou ele deve ser criado pelos desenvolvedores de terminais ou fornecido por DLLs externas
Você o testou em servidores públicos externos, especialmente com TLS? Seria ótimo ver um ou mais exemplos.
PS. Estou perguntando porque seu teste não funciona com wss://echo.websocket.org (estou anexando o log, BTW - por que você escreve informações tão volumosas e inúteis?) O ws puro (porta 80) funciona bem. No passado, também tentei executar minha implementação de WebSockets no MQL5, mas não consegui porque os soquetes do MQL têm algumas complexidades com a camada TLS. Parece que isso ainda não foi resolvido. E o wss é uma necessidade hoje em dia, porque todos os servidores de produção usam TLS e recusam conexões não seguras.
O WebSocket, mesmo em implementações normais, rápidas e corretas, é algo bastante caprichoso. Isso não deve ser feito em MQL
na minha opinião: ou ele deve aparecer dos desenvolvedores do terminal ou ser fornecido por DLLs externas.
Isso é besteira.
Não se trata de nenhuma bobagem sobre MQL. Havia problemas com o TLS (escrevi sobre eles no fórum, mas não esperei por uma solução) e ainda há. O exemplo do artigo não funciona. Anexei o registro ao artigo original em inglês.
- 2020.11.25
- www.mql5.com
Isso é besteira.
Há um problema antigo no wss: na função padrão SocketIsReadable ()
É elementar contornar, mas sem essa função.
uint len = 1024; //SocketIsReadable(socket);
Há um problema antigo no wss: na função padrão SocketIsReadable ()
Workaround é elementar, mas já sem essa função.
Há alguma justificativa para isso? Qual é o número mágico e por que ele seria adequado para uma mensagem de comprimento 256 ou 1500, por exemplo?
Há um problema antigo no wss: na função padrão SocketIsReadable ()
A solução alternativa é elementar, mas já sem essa função
Você simplesmente não entende e não sabe como usar essa função.
Essa função fornece instantaneamente o número de bytes disponíveis no buffer de entrada e não informa se o soquete está ativo. A função é muito importante e permite que você não entre em espera síncrona, mas leia os dados parte por parte sem perder o controle sobre o programa.
E as funções TLS também estão corretas - elas são fornecidas para usuários treinados que sabem como e em que sequência usá-las. Elas não são para aqueles que "ligam e pronto".
Além disso, as funções socket e tls são, em sua forma pura, as mesmas que o terminal usa para conexões raw/tls/https. Ou seja, tudo funciona bem. Essas mesmas implementações funcionam em nossas soluções de alta carga.
As funções de rede brutas não são para iniciantes nem para uso ingênuo. É preciso entender suficientemente bem os princípios e as peculiaridades da interação de rede. E se estivermos falando de TLS, então os métodos e a sequência de processamento do processo de handshake.- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo WebSocket para MetaTrader 5 foi publicado:
Antes do aparecimento das funções de rede na API MQL5 atualizada, os aplicativos MetaTrader eram limitados em sua capacidade de se conectar e interagir com serviços baseados no protocolo WebSocket. Agora a situação mudou. Neste artigo, veremos a implementação da biblioteca WebSocket em MQL5 puro. Uma breve descrição do protocolo WebSocket e um guia passo a passo sobre como usar a biblioteca resultante serão apresentados.
Abaixo está um vídeo do programa que funciona quando conectado ao servidor.
Autor: Francis Dube