文章 "MetaTrader 5 中的 WebSockets"

 

新文章 MetaTrader 5 中的 WebSockets已发布:

在引入随 MQL5 API 更新而提供的网络功能之前,MetaTrader 程序与基于 WebSocket 的服务连接和接口的能力受到许多限制。当然,这一切都改变了,在本文中,我们将探讨纯 MQL5 中 WebSocket 库的实现。WebSocket 协议的简要描述将与如何使用生成的库的逐步指南一起给出。

这是连接到服务器时程序运行的视频。



作者:Francis Dube

 
出色的文章。MT5 是时候提供本地websocket 支持了。
希望这些代码能作为 MT5 标准包含文件。
或者更好的是,出于性能考虑,MT5 应提供本地 websocket API。

感谢您的努力。
 
"The release folder contains prebuilt dll and .exe files available for immediate use."

你是不是忘了 Github 页面上提到的 Release 文件夹?)

 
MetaQuotes:

文章WebSocket for MetaTrader 5 已发布:

作者:Francis Dube

WebSocket 即使在正常、快速和正确的实现中也是相当任性的。禁止在 MQL 中使用它

我认为:要么由终端开发者提供,要么由外部动态链接库提供。

 
为什么需要它?为什么需要Websocket,它比普通 mt 改进了哪些功能?能否举例说明在数量或质量上的改进。以前是这样,有了 Websocket 就变成这样了。速度快了很多倍,谢谢!
 

你在外部公共服务器上测试过吗,尤其是使用 TLS 时?如果能提供示例就更好了。

PS.我之所以这么问,是因为您的测试在 wss://echo.websocket.org 上不起作用(我附上了日志--您为什么要写这么多没用的信息?)纯 ws(80 端口)可以正常工作。过去我也曾尝试在 MQL5 中运行我的 WebSockets 实现,但失败了,因为 MQL 的套接字与 TLS 层有一些错综复杂的关系。这些问题似乎仍未解决。如今,wss 是必须的,因为所有生产 服务器都使用 TLS 并拒绝非安全连接。

附加的文件:
log.txt  1113 kb
 
Maxim Kuznetsov:

即使在正常、快速和正确的实现中,WebSocket 也是一个相当任性的东西。在 MQL 中不应该这样做

我认为:要么由终端开发人员提供,要么由外部 DLL 提供。

一派胡言。

在 MQL5 中一切都运行得很好。
 
Renat Fatkhullin:
那是垃圾。

一切都在 MQL5 中完美运行。

MQL 根本不是胡说八道。TLS 存在问题(我在论坛上写过,但我并没有等待解决方案),现在仍然存在。文章中的例子不起作用。我将日志附在 英文原文中。

Discussion of article "Websockets for MetaTrader 5"
Discussion of article "Websockets for MetaTrader 5"
  • 2020.11.25
  • www.mql5.com
New article Websockets for MetaTrader 5 has been published: Author: Francis Dube...
 
Renat Fatkhullin:
那是垃圾。

一切都在 MQL5 中完美运行。

这里有一个 wss 的老问题:在标准函数SocketIsReadable()
中,绕过这个函数是很基本的,但没有这个函数。

uint len = 1024; //SocketIsReadable(socket);


 
Roman:

这里有一个 wss 的老问题:在标准函数SocketIsReadable() 中
解决方法很简单,但已经没有这个函数了。

这样做有什么理由吗?这个神奇的数字是什么,为什么对长度为 256 或 1500 的信息来说就没有问题?

 
Roman:

这里有一个 wss 的老问题:在标准函数SocketIsReadable() 中
解决方法很简单,但已经没有这个函数了

您根本不了解也不知道如何使用 该函数。

该函数会立即给出输入缓冲区中的可用字节数,但不会告诉您套接字是否还活着。这个函数非常重要,它允许你不进入同步等待,而是在不失去对程序控制的情况下逐个读出数据。

TLS 功能也是正确的--它们是为受过培训的用户 提供的,这些用户知道如何使用以及使用的顺序。它们不是为那些 "调用后就完事了 "的人准备的。


不仅如此,socket 和 TLS 函数的纯粹形式与终端用于原始/tls/https 连接的相同。也就是说,一切运行正常。在我们的高负载解决方案中,这些实现方式也是一样的。

原始网络函数不适合初学者,也不适合天真地使用。我们应该充分了解网络交互的原理和特殊性。如果我们谈论的是 TLS,那么就需要了解处理握手过程的方法和顺序。