簡體   English   中英

為什么 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 設置循環歷史交易並構建一個包含交易信息的大字符串。 然后,我使用普通的PUSH/PULL模式每秒將這個字符串從 MT4 發送到 python 后端。

無論出於何種原因,當傳輸的字符串變得太長時,數據不會在拉側接收到。 后端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)

我現在有點好奇,因為 pull socket 似乎甚至無法在單個 MT4 客戶端 - Python 連接上處理包含 40 筆交易的字符串及其相應信息。 我實際上計划將其設置為一次處理 5.000 多個 MT4 客戶端 - python 后端連接。

:是否有可能是 pull 端太慢而無法抓取和處理所有數據,然后導致溢出(因此由於處理部分而出現延遲)?

零機會。

每秒發送 640 B絕對不是什么絕技每秒 5kb - 遠不及性能上限......)

發布的問題公式是無法確定的。

步驟1) POSACK/NACK證明PUSH側是否接受無錯發送的有效載荷。

步驟 2)通過 python-2-python tcp:// -transport-class 證明PULL側不應該受到指責 - [PUSH.send(640*chr(64+i)) for i in range( 10 )]單通道跨主機到主機躍點,至少通過您的本地物理網絡(沒有 VMCI/模擬 vLAN,沒有其他本地主機托管)

第 3 步)如果上述任一步驟得到POSACK -ed,您的下一個機會是 ZeroMQ 配置空間和/或基於 MT4 的PUSH端不兼容,最有可能“隱藏”在(未提及)使用的第三方 ZeroMQ 包裝器中/首先- string處理/處理方面的問題(您必須已經閱讀過,因為在過去的帖子中已經多次觀察和提到這個問題,以及“隱藏的”MQL4 內部生態系統變化)。

無論如何,請繼續關注。 ZeroMQ 是領域專業和設計的可靠選擇和真正的動力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM