为什么 ZeroMQ 在推/拉 MT4 - Python 设置上变得太大时没有收到字符串?



>我设置了一个EA,它循环历史交易并构建一个包含交易信息的大字符串。然后,我使用纯PUSH/PULL模式每秒将此字符串从MT4发送到python后端。

无论出于何种原因,当传输的字符串变得太长时,拉取侧不会收到数据。后端PULL-socket 对每个字符串进行切片并进一步处理。

PULL端是否有可能太慢而无法抓取和处理所有数据,从而导致溢出(因此由于处理部分而出现延迟(?

谈到文件大小,我们远低于每秒5kb。

这是PULL套接字,它在接收数据后对其进行操作:

while True:
# check 24/7 for available data in the pull socket
try:
msg = zmq_socket.recv_string()
data = msg.split("|")
print(data)
# if data is available and msg is account info, handle as follows
if data[0] == "account_info":
[...]
except zmq.error.Again:
print("nResource timeout.. please try again.")
sleep(0.000001)

我现在有点好奇,因为拉套接字似乎甚至无法在单个 MT4 客户端 - Python 连接上处理包含 40 笔交易及其相应信息的字符串。我实际上计划将其设置为一次处理超过 5.000 个 MT4 客户端 - python 后端连接。

拉侧是否可能太慢而无法抓取和处理所有数据,从而导致溢出(因此由于处理部分而出现延迟(?

零机会。

每秒发送 640 B 绝对不会阻碍(每秒 5kb- 远未达到性能上限......

否则,发布的问题表述是不可判定的。

步骤1(POSACK/NACK证明PUSH端是否接受有效负载以无差错发送。

步骤 2(证明PULL端不应受到指责 - 通过python-2-pythontcp://传输类单通道跨主机到主机跃点,至少通过本地物理网络(没有 VMCI/模拟 vLAN,没有其他本地主机托管([PUSH.send(640*chr(64+i)) for i in range( 10 )]

步骤3( 如果上述任一步骤都POSACK-ed,您的下一个机会是 ZeroMQ 配置空间和/或基于 MT4 的PUSH端不兼容,很可能"隐藏"在(未提及(第三方 ZeroMQ 包装器中使用/string处理/处理的第一方问题(您一定已经阅读过,因为在过去的帖子中已经多次观察到并提到了这个"隐藏"MQL4 内部生态系统的问题更改(。

无论如何,请继续关注。ZeroMQ是分布式系统领域中专业和低延迟设计的真正选择和真正的马力。

最新更新