你是不是忘了 Github 页面上提到的 Release 文件夹?)
WebSocket 即使在正常、快速和正确的实现中也是相当任性的。禁止在 MQL 中使用它
我认为:要么由终端开发者提供,要么由外部动态链接库提供。
你在外部公共服务器上测试过吗,尤其是使用 TLS 时?如果能提供示例就更好了。
PS.我之所以这么问,是因为您的测试在 wss://echo.websocket.org 上不起作用(我附上了日志--您为什么要写这么多没用的信息?)纯 ws(80 端口)可以正常工作。过去我也曾尝试在 MQL5 中运行我的 WebSockets 实现,但失败了,因为 MQL 的套接字与 TLS 层有一些错综复杂的关系。这些问题似乎仍未解决。如今,wss 是必须的,因为所有生产 服务器都使用 TLS 并拒绝非安全连接。
即使在正常、快速和正确的实现中,WebSocket 也是一个相当任性的东西。在 MQL 中不应该这样做
我认为:要么由终端开发人员提供,要么由外部 DLL 提供。
那是垃圾。
MQL 根本不是胡说八道。TLS 存在问题(我在论坛上写过,但我并没有等待解决方案),现在仍然存在。文章中的例子不起作用。我将日志附在 英文原文中。
- 2020.11.25
- www.mql5.com
那是垃圾。
这里有一个 wss 的老问题:在标准函数SocketIsReadable()
中,绕过这个函数是很基本的,但没有这个函数。
uint len = 1024; //SocketIsReadable(socket);
这里有一个 wss 的老问题:在标准函数SocketIsReadable() 中
解决方法很简单,但已经没有这个函数了。
这样做有什么理由吗?这个神奇的数字是什么,为什么对长度为 256 或 1500 的信息来说就没有问题?
这里有一个 wss 的老问题:在标准函数SocketIsReadable() 中
解决方法很简单,但已经没有这个函数了
您根本不了解也不知道如何使用 该函数。
该函数会立即给出输入缓冲区中的可用字节数,但不会告诉您套接字是否还活着。这个函数非常重要,它允许你不进入同步等待,而是在不失去对程序控制的情况下逐个读出数据。
TLS 功能也是正确的--它们是为受过培训的用户 提供的,这些用户知道如何使用以及使用的顺序。它们不是为那些 "调用后就完事了 "的人准备的。
不仅如此,socket 和 TLS 函数的纯粹形式与终端用于原始/tls/https 连接的相同。也就是说,一切运行正常。在我们的高负载解决方案中,这些实现方式也是一样的。
原始网络函数不适合初学者,也不适合天真地使用。我们应该充分了解网络交互的原理和特殊性。如果我们谈论的是 TLS,那么就需要了解处理握手过程的方法和顺序。
新文章 MetaTrader 5 中的 WebSockets已发布:
在引入随 MQL5 API 更新而提供的网络功能之前,MetaTrader 程序与基于 WebSocket 的服务连接和接口的能力受到许多限制。当然,这一切都改变了,在本文中,我们将探讨纯 MQL5 中 WebSocket 库的实现。WebSocket 协议的简要描述将与如何使用生成的库的逐步指南一起给出。
这是连接到服务器时程序运行的视频。
作者:Francis Dube