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

Why does ZeroMQ not receive a string when it becomes too large on a PUSH/PULL MT4 - Python setup?

我有一个 EA 集可以循环历史交易并构建一个包含交易信息的大字符串。然后,我每秒从 MT4 发送这个字符串到 python 后端,使用普通的 PUSH/PULL 模式。

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

任何 PULL 端太慢而无法抓取并且 处理 所有数据然后导致溢出的机会(因此由于处理部分)?

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

这是PULL-socket,它在接收到数据后进行操作:

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 客户端上处理包含 40 笔交易及其相应信息的字符串 - Python 连接。我实际上计划将其设置为同时处理 5.000 多个 MT4 客户端 - python 后端连接。

Q : Any chance that the pull side is too slow to grab and process all the data which then causes an overflow (so that a delay arises due to the processing part)?

零机会。

每秒发送 640 B 绝对 没有阻碍 ( 每秒 5kb - 离性能上限还很远... )

张贴的问题公式在其他方面是不可判定的。

Step 1) POSACK/NACK证明PUSH方是否接受payload发送无错.

步骤 2) 证明 PULL 一方不应受到指责 - [PUSH.send(640*chr(64+i)) for i in range( 10 )] 通过 python-2-python tcp://-transport-class 单通道跨越主机到主机的跃点,至少在您的本地物理网络上(没有 VMCI/emulated vLAN,没有其他本地主机托管 )

步骤 3) 如果上述任一步骤得到 POSACK-ed,您的下一个机会是 ZeroMQ 配置 space and/or MT4 - 基于 PUSH 端不兼容,很可能 "hidden" 在(未提及的)第三方 ZeroMQ 包装器中使用/第一方问题与 string 处理/处理(您必须已经阅读关于,因为在过去的帖子中已经多次观察到并提到了这个问题 "hidden" MQL4 内部生态系统变化)。

无论如何,敬请期待。 ZeroMQ 是一个可靠的选择,也是专业人士和 designs in 领域的真正动力。