为什么 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 是一个可靠的选择,也是专业人士和 low-latency designs in distributed-system 领域的真正动力。
我有一个 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 是一个可靠的选择,也是专业人士和 low-latency designs in distributed-system 领域的真正动力。